Hur läser jag in enklast en teckensträng i C, och kollar så att den endast innehåller Aa-Zz? :q
jag bråkar och bråkar med att köra vektorer i char format och kollar med ett skapat macro.
men det vill inte funka, eller snarare det funkar inte alls..
8 svar · 279 visningar · startad av Fredde Mannen
Hur läser jag in enklast en teckensträng i C, och kollar så att den endast innehåller Aa-Zz? :q
jag bråkar och bråkar med att köra vektorer i char format och kollar med ett skapat macro.
men det vill inte funka, eller snarare det funkar inte alls..
Annars tror jag att isalpha (som finns i ctype.h) löser ditt problem.
juventus1 skrev:
Annars tror jag att isalpha (som finns i ctype.h) löser ditt problem.
Jo jag hade som tänkt mig det, men det funkade inte, jag vet inte om det beror på att min inläsning var lite uppfuckad eller nåt.
Om jag läser in en textsträng i en vektor kallad str som vi kan ha gett storleken 50.
hur kollar jag igenom denna vektor och ger ett felmeddelande med en ny chans att fylla i den, dvs om något annat tecken än Aa-Zz påträffas? :q
har bråkat som tusan med det.. ibland blir det rätt och ibland inte.. vad beror det på? (fråga inte efter kod, den brände jag upp).
Det var i C, eller hur?
char ok,*ptr;
ok = 1;
ptr = str;
while(*ptr++){
if(*ptr<'A' || *ptr>'Z')
if(*ptr<'a' || *ptr>'z')
ok = 0;
}
...
...
if(!ok)
_getNewString();
Typ ;)
Bara ett exempel
#include <stdio.h>
char checkLetters(char *str)
{
while(*str){
if(*str < 'a' || *str > 'z')
if(*str < 'A' || *str > 'Z')
return 0;
str++;
}
return 1;
}
int main(int argc,char *argv[])
{
char str[50];
do {
printf("Put in a string");
scanf("%s",&str);
}while(!checkLetters(str));
return 0;
}
red:
Editerade bort slarvet som påpekas nedan.
Uhh, den koden kollar ju ett tecken. Du returnerar ju från funktionen garanterat redan första gången.
Dessutom missar du ju det första tecknet iom att du ökar pekaren det första du gör i loopen.
Så här kan man göra:
bool checkLetters(char *str)
{
while (isalpha(*str++));
return *(str-1) == 0;
}
Man går igenom strängen tills man hittar det första tecknet som inte är en bokstav och kollar om det är slutet på strängen.
tack för era svar.. :) ser att jag har arbetat åt helt rätt håll, men gjort lite flummiga misstag här och där.. :D