Gå til innhold

string peker og sammelikning, trenger hjelp


Anbefalte innlegg

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 av Alex_2xA
Lenke til kommentar
Videoannonse
Annonse

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 av søpple
Lenke til kommentar

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 av søpple
Lenke til kommentar

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 av Alex_2xA
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...