Alex_2xA Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 (endret) Jeg skal skrive et program som skal sammelikne to stringer tegn for tegn og si om de er like eller ikke (bare de n første tegnenen), og ettersom dette er en oppgave jeg har fått må den følge visse parametere, oppgaven er som følger: Oppgave 1 (innleveres) - Char-tabeller, pekere og bruk av string-klassen I denne oppgaven skal du skrive et program som bruker en funksjon som sammenlikner deler av to tekststrenger og returnerer true eller false avhengig av resultat. Funksjonen tar følgende parametre: - to tekst-strenger (char-tabeller eller av typen string) og - et heltall (n) som angir antall tegn som skal sammenliknes i de to tekst-strengene Funksjonen skal sammenlikne de n første tegnene i de to tekst-strengene og returnere true dersom disse er lik og false ellers. NB! du skal ikke bruke eksisterende funksjoner fra biblioteket som f.eks. strncmp(). I programmet lar du brukeren starte med å oppgi to tekst-strenger og antall tegn som skal sammenliknes. Programmet kaller så opp funksjonen og skriver om strengene er lik eller ikke. Ta nødvendige forutsetninger og ta høyde for brukerfeil. Du skal lage to varianter av funksjonen. a) Skriv funksjonen slik at du bruker char-tabeller, funksjonsprototypen skal se slik ut: bool sammenlikneStrenger(char *str1, char *str2, int n); b) Skriv funksjonen slik at du bruker string-klassen, funksjonsprototypen skal se slik ut: bool sammenlikneStrenger(string *str1, string *str2, int n); oppgave 1a var grei, den funket fint, men jeg søter på problemer i oppgave 1b: Utdrag fram main(): ********************************** string str1, str2; bool lik; int str1len=0, str2len=0; cout << "Tast inn streng1:";line(1); getline(cin, str1, '\n'); line(1); cout << "Tast inn streng2:";line(1); getline(cin, str2, '\n'); line(1); str1len = str1.length(); str2len = str2.length(); cout << "Streng1 har lengde: " << str1len; line(1); cout << "Streng2 har lengde: " << str2len; line(1); cout << "Hvor mange tegn skal sammeliknes? "; cin >> n; cin.ignore(); lik = strComp(&str1,&str2,n); ************************************ sammenliknins funksjonen: bool strComp(string *s1, string *s2, int n){ for(int i=0; i<n; i++){ if(s1[i]==s2[i]){ //NOP }else{ return false; } } return true; } Tilsynelatene klarer den å sammenlikene første tegn, og setter jeg i=0 går det greit, men når i(i funksjonen) blir 1 eller høyere genererer windows en feilmelding: "lab06_1b.exe har et problem og må lukkes. Vi beklager det inntrufne." så er det noen som kan hjelpe? er det pga at jeg bruker pekere? eller er det noe annet som skyldes? All hjelp er velkomen Endret 7. mars 2005 av Alex_2xA Lenke til kommentar
A_N_K Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 Du må dereferere pekerne, det beste ville egentlig vært referanser Lenke til kommentar
Dead_Rabbit Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 Jeg tror du får en SIGSEGV-feil ved å gjøre slik: s1[i] == s2[i] fordi disse er pekere, og du akksesserer ikke verdien, men minne-addressen. Prøv å søke på forumet etter SIGSEGV-feil, søppel forklarte dette ganske godt en gang.. Lenke til kommentar
CuEdge Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 prøv dette i stedet: *s1 == *s2 burde funke... Lenke til kommentar
efikkan Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 Ja det burde fungere. Det er noen måneder siden jeg brukte c/c++ nå, men dette tror jeg skal fungere. (Jeg bruker nå pascal fordi det er mer systematisk) Er dette en skoleoppgave?? Lenke til kommentar
søpple Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 (endret) Ja, dette: #include <iostream> #include <fstream> using namespace std; int main() { char navn[30]; navn[0] = 'O'; navn[1] = 'l'; navn[2] = 'a'; navn[3] = '\0'; cout << navn << endl; return(0); } // main ...akksesserer i aller høyeste grad verdien. *navn[0] = 'a'; ville dereferensiert to ganger. "mer systematisk" er ganske på trynet å si -- for alt virker som kaos når man ikke forstår det, og det kommer tydelig frem her (hadde du sagt "er lettere å forstå, lære og/eller bruke", så hadde jeg gått med på det) edit: #include <iostream> #include <fstream> using namespace std; int main() { char* navn[30]; navn[0] = (char*)malloc(1); navn[1] = (char*)malloc(1); navn[2] = (char*)malloc(1); navn[3] = (char*)malloc(1); *navn[0] = 'O'; *navn[1] = 'l'; *navn[2] = 'a'; *navn[3] = '\0'; cout << *navn[0] << *navn[1] << *navn[2] << *navn[3] << endl; return(0); } // main ..dereferenser altså to ganger .. Edit2: *fjernet -- da det var jeg som misforstod* Endret 7. mars 2005 av søpple Lenke til kommentar
iobas Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 hva snakker du om egentlig søpple? du må derefere 2 ganger når du har en pointer til en string vet du. så jo, (*s1) == (*s2) ville funka. Lenke til kommentar
søpple Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 åh faen .. jeg trodde dette var en annen tråd -- ellernoe slikt .. *shrug* ..beklager Lenke til kommentar
iobas Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 så kanskje du burde holde kjeft før du vet hva du snakker om og ikke lage unødig støy. Lenke til kommentar
søpple Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 (endret) jada .. beklager .. jeg var bombesikker på at det ikke var dette fyren drev med. altså pekere til strenger. (som A_N_K nevnte så ville referanser vært mer naturlig .. så jeg antok at det var det det gikk ut på - eller så trodde jeg dette var en annen tråd (flere fått samme oppgave ellernoe?)) uansett var det på slutten rettet mot fyren som snakket om pascal - altså alt virker usystematisk når man ikke forstår det .. samme hvor komplisert det faktisk er både å lære og bruke, eller ikke Edit: det at noe øker i kompleksitet hurtig - og /på den/ måten virker usystematisk når man ser på det er en annen ting, i mine øyne i hvertfall .. (det var her snakk om kompleksitet i sammenheng med grunnleggende ting - ikke ting som dukker opp etterhvert siden) Endret 7. mars 2005 av søpple Lenke til kommentar
Alex_2xA Skrevet 7. mars 2005 Forfatter Del Skrevet 7. mars 2005 (endret) Takker for svar, mange gode ideer . Dette er forresten en skole oppgave ja, vi har begynt med pekere, jeg har jobbet noe med c++ før, men aldri noe spesielt med pekere så dette er et litt nytt tema for meg, men det siger inn sakte men sikkert . PS, programmet funker nå veldig fint, takker igjen Endret 7. mars 2005 av Alex_2xA Lenke til kommentar
søpple Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 (endret) Stå på! :] Endret 7. mars 2005 av søpple Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå