Skillnad ska ej göras på stora och små bokstäver åäö

Permalänk
Medlem

Skillnad ska ej göras på stora och små bokstäver åäö

Hejsan!

Går en kurs i programmering C och jag är totalt nybörjare så jag skulle behöva lite hjälp.

Just nu gör jag ett program som ska avgöra om ett ord är en palindrom eller inte.
Det jag har problem med är att jag inte får ÅÄÖ till små åäö.
Tex apa, Apa, apA, åhå fungerar men inte om man skriver in Åhå.

#include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> char avsluta; unsigned char palindrom[BUFSIZ]; int main(void) { char a[100], b[100]; int i; /* avsluta programmet med q*/ for(;avsluta !='q';){ printf("Detta program avg\224r om ordet \204r ett palindrom eller inte.\n\n\n"); /* hämta in ord */ printf("Skriv in ditt ord: "); scanf("%s", &a); /* Stora ÅÄÖ till små åäö*/ for(i=0;i<strlen(palindrom);i++){ if(palindrom[i]=='Å') palindrom[i]='å'; if(palindrom[i]=='Ä') palindrom[i]='ä'; if(palindrom[i]=='Ö') palindrom[i]='ö'; } strlwr(a); /* gör alla bokstäver som små */ strcpy(b,a); /* kopierar sträng b med a */ strrev(b); /* omvänder sträng b */ if( strcmp(a,b) == 0 ) printf("Ordet \204r en palindrom.\n"); else printf("Ordet \204r inte en palindrom.\n"); printf("\n\nForts\204tt genom att trycka p\206 'Enter'\n"); printf("Avsluta med 'q'\n\n\n"); fflush (stdin); avsluta=getche(); system("cls"); } return 0; }

Så om någon skulle kunna leda in mig på rätt spår och hur jag ska tänka så vore jag himla tacksam

Permalänk
Hedersmedlem

Kolla igenom var du använder arrayerna a, b och palindrom. En ska bort!

När det är fixat kan du som extraövning försöka skriva en palindromkontroll som inte kopierar strängen.
Man kan alltså klara sig utan strlen (kan du redan nu om du tar tillvara returvärdet från scanf), strlwr, strcpy, strrev och strcmp.

Edit: Nej strlen klarar man sig inte utan lika enkelt som jag trodde, var inte så förtrogen med returvärdet av scanf.
Edit: Vad talar jag för goja. strlwr är behändigt att använda, annars måste man göra det själv.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Hedersmedlem

Jag har testat och hamnat i mardrömmen C och svenska å,ä och ö.
Deklarera variabeln du läser in till (i din kod, a) som "unsigned char a[100]".

for (i = 0; i < strlen(a); i++) { switch(a[i]){ case 143: // Å a[i] = 134; // å break; case 142: // Ä a[i] = 132; // ä break; case 153: // Ö a[i] = 148; // ö break; } }

Så slipper du tänka på vad 'Å', 'Ä', och 'Ö' tolkas som av kompilatorn. Char är ju vanliga tal bara, så här används vad 'Å' är i teckenkodningen. Det här kompilerade och fungerade (min variant utan strängkopiering) i Visual Studio 2008 på windows 7.

Glad att man inte behöver hålla på med C och sådana här smådetaljer. Finns nog extrabibliotek som förenklar det om man ska utveckla större projekt, men jobbigt att behöva blanda in sådant när det är första stapplande stegen att lära sig C programmering. Men nu är jag ingen så vidare van C-programmerare så någon annan får väl tycka till bättre om detta.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Tusen tack! Koden fungerar bra ska bara ta och lära mig vad den koden betyder och gör också

Permalänk

Stränghantering i C är lite som att simma med mjukisbyxor och hood-tröja: tungt och med en viss rädsla för döden.

Visa signatur

Citera, tack!
Har du läst tråden om strandhögtalare och andra musiklådor?

Permalänk
Medlem

Haha ja nu blev jag ju genast lite mer positiv till den här kursen :/

Permalänk
Medlem