Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


jämför textsträng med fält

Postades av 2002-10-12 17:32:42 - Martin Sav, i forum c++, Tråden har 7 Kommentarer och lästs av 867 personer

Hej
Jag jämför en textsträng med ett fält enligt nedanstående kod.
Får dock inte det hela att fungera.

<code>

int main (void){
char *s, ord[20], *reserv[] = {"auto", "break", "case", "char", "const", "volatile", "while"};
printf("Skriv ett ord: ");
fflush(stdin);
gets(ord); //läs in textsträngen
s = *reserv; //peka på försat ellementet
while ((strcmp (ord, s) != 0) || (*s !='\0')) { //är ord lika med s eller har vi kommit till NULL
s++; //stega ett steg framåt
}

if (strcmp (ord, s) == 0) /fanns ordet med i fältet ? JA
printf("Du har skrivit ett reserverat ord");
else //nej
printf("Inget reserverat ord");


while (!KeyHit()){;}

return 0;
}

</code>
har ni tips på hur jag får det att fungera?


Svara

Sv: jämför textsträng med fält

Postades av 2002-10-13 13:55:27 - Niklas Jansson

Det är svårt att se bara så där... Till att börja med skall du i alla fall ha en avslutande "" i arrayen.

Sedan bör

if (strcmp (ord, s) == 0)

nog istället vara

if (*s!=0)

av effktivitetsskäl.

--

Märkte ett stort fel: s skall vara av typen char **

/Niklas Jansson


Svara

Sv: jämför textsträng med fält

Postades av 2002-10-14 19:00:31 - Martin Sav

Mitt störtsta problem är while satsen. Det är meningen att jag ska kolla om ordet jag skrev in finns med i arrayen. Finns ordet så avslutas lopen.
Tyvärr så fungerar inte lopen, lopen ska även avslutas då vi har kollat igenom alla fält! Har du några tips på hur jag ska ändra i koden?

while ((strcmp (ord, *s) == 0) || (*s !=0)){
s++;
}

Om jag skriver på följadne sätt så avbryts loopen om mitt ord som jag skriver in finns med i arrayen

while (strcmp (ord, *s)){
s++;
}

Men hur gör jag för att få med (*s !=0) dvs om jag har gått igenom hela arrayen och ordet inte fanns med ska lopen avslutas.


Svara

Sv: jämför textsträng med fält

Postades av 2002-10-15 19:10:48 - Niklas Jansson

Det du skriver i andra jämförelsen är att pekar s på 0 - dvs är minnesadressen till **s 0, och det blir den aldrig.

while ((strcmp (ord, *s) == 0) || (**s !=0))
s++;

(Jag skulle nog iofs använt en for-sats...)

Sen måste du naturligtvis ha med tomma strängen sist.

*reserv[] = {"auto", "break", "case", "char", "const", "volatile", "while", ""};


/Niklas Jansson


Svara

Sv: jämför textsträng med fält

Postades av 2002-10-15 23:30:30 - Martin Sav

Hej Niklas. Tack för alla tips. Har skrivit om koden lite nu.

<code>
int main (void){
char ord[20], *reserv[] ={"auto", "break", "case", "char", "const", ""};
int i;
printf("Skriv ett ord: ");
fflush(stdin);
gets(ord);

for(i=0; *reserv[i]; i++) {
if(!strcmp(ord, reserv[i]))
printf("Du har skrivit ett reserverat ord");
}
printf("Du har inte skrivit ett reserverat ord");
while (!KeyHit()){;}

return 0;
}

Problemet är nu att skriver jag in ett ord som inte finns med i arrayen får jag följande felmedelande.
Deference of out-of -bounds pointer: 1 bytes past end of array.

Får för övrigt samma felmedelande om jag skriver ett ord som finns i arrayen.
Har någon tips på hur jag gör för att modifiera loopen.?




Svara

Sv: jämför textsträng med fält

Postades av 2002-10-16 18:54:54 - Niklas Jansson

Du kunde behållt pekaren:

for(p=reserv; **p; p++)


Jag ser inte felet bara så här...

Prova att skriva ut varje ord en gång i loopen, så ser du när det händer (antagligen sist).

Du bör dessutom ha

if(!strcmp(ord, reserv[i]))
{
printf("Du har skrivit ett reserverat ord");
break;
}

Så bryts den om det inte går rätt till.

Beskriv var felet händer lite noggrannare så kanske det hjälper.


/Niklas Jansson


Svara

Sv: jämför textsträng med fält

Postades av 2002-10-16 22:13:49 - Martin Sav

Problemet ligger i att när pekaren har gått igenom alla fält. Så går den ytterliggare ett steg, dvs så den hamnar utananför minessadressen. Dvs den går ett extra varv i loopen.


Svara

Sv: jämför textsträng med fält

Postades av 2002-10-17 13:06:51 - Niklas Jansson

Som väntat...
Prova att lägga till ett extra "" på slutet.
Kolla nu när den bryter.

Det är förmodligen ett fel i jämförelsen någonstans. Kan vara att dereferenseringen av pekaren inte är rätt...
Prova med olika varianter på antalet ^.

/Niklas Jansson


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
5 505
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies