webForumDet fria alternativet

endast bokstäver?

C/C++ur C/C++

8 svar · 279 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
Frågan#1

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..

Medlem sedan dec. 20003 887 inlägg
#2

Du kanske ska börja spana lite på regular expressions...

CAtlRegExp Class.

Medlem sedan dec. 2000399 inlägg
#3

Annars tror jag att isalpha (som finns i ctype.h) löser ditt problem.

Medlem sedan nov. 20014 054 inlägg
#4

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).

Medlem sedan juni 200010 432 inlägg
#5

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 ;)

Medlem sedan juni 200010 432 inlägg
#6

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.

Medlem sedan juli 2002581 inlägg
#7

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.

Medlem sedan juni 200010 432 inlägg
#8

Så sant, så sant...

Har ivf editerat mitt inlägg till en fungerande variant.

Medlem sedan nov. 20014 054 inlägg
#9

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

139 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)