6 svar
419 visningar
Elias93 behöver inte mer hjälp
Elias93 130
Postad: 21 maj 2019 12:20

Konvertera bokstäver till små i sträng i C.

Hej!

"//Convert string to lowercase and return it (i.e. return changed original)
// This uses ASCII codes. The difference between upper case and lower case
// letters is 32 (ASCII code for space). Just need to consider the english alphabet (A-Z)"

char *to_lower(char *str) {
// TODO
int i = 0;
while (str[i] != '\0'){

if( atoi("65") <= str[i] <= atoi("90") ){


/* int a = atoi(&str[i]);
char c = a + 32;
str[i] = c; */
}


i++;
}
return str;
// return -1;
}

 

Fråga: Hur ändrar jag ascii nummret i det aktuella elementet i fältet / arrayen med + 32 och får C att ändå förstå att jag vill ändra bokstäverna?

joculator 5289 – F.d. Moderator
Postad: 21 maj 2019 12:42

hmmm ... tänk såhär:

du har ett tecken (i en array)
du tar reda på vad det tecknet har för ascii-värde
du plussar värdet med 32
du tar reda på vilket tecken som har det asciivärdet
du retunerar det tecknet

Vill du kan du såklart ändra själva arrayen också och sätta det elementet till tecknet (inte till ascii-värdet)
Vet du hur du ändrar värdet på ett element?

Elias93 130
Postad: 21 maj 2019 12:49

Uppgiften är att ändra vad som finns lagrat i varje element, jag kan inte skriva return och så ett nummer utan jag ska ändra värdet på varje elemt som är en stor bokstav till små bokstäver. Jag har skrivit ett if villkor som identifierar stora bokstäver i c. Nu måste jag öka ascii koden på varje elemnt med 32. Hur gör jag det?

Elias93 130
Postad: 21 maj 2019 12:53

Det måste finnas ett sätt att mata in ett visst ascii värde på en plats i ett fält så att det är en bokstav.

Elias93 130
Postad: 21 maj 2019 13:18

Nu hittade jag en lösning även om det står att int inte alltid får plats i char.

int i = 0;
while (str[i] != '\0'){
int x = str[i];
if( x <=90 && x >= 65 ){

int a = str[i];
int b = a + 32;
char c = b;
str[i] = c;

/* int a = atoi(&str[i]);
char c = a + 32;
str[i] = c; */
}

i++;
}

Laguna 30251
Postad: 21 maj 2019 17:55

Du kan använda 'A' i stället för 65 så blir det mera lättläst.

Elias93 130
Postad: 22 maj 2019 16:21

ok tack

Svara
Close