apache pig — латинская свинья в c ++, некоторые ошибки для «цветка» и «ритм»;

Мой код работает нормально, за исключением «Цветка» и «Ритма». Выход получается таким образом: «Owerfiay», «Ythrmreay»; где «i» и «e» — это i-cap и e-cap. Я попытался проверить таблицу ASCII на случай, если что-то пошло не так, но я не могу найти эти два в таблице. Мои знания в c ++ ограничены, поэтому, когда я попытался прочитать некоторые из существующих потоков здесь и где-либо еще, я не мог идти в ногу с ними.

Вот мой код:

#include <stdio.h>
#include <string.h>

void toPigLatin(char *i){
int k,m;
char *n;
n = i;
printf("Pig Latin version: ");
if(*i=='A'||*i=='a'||*i=='E'||*i=='e'||*i=='I'||*i=='i'||
*i=='O'||*i=='o'||*i=='U'||*i=='u'){
k = 0;
while(*i!='\n'){
printf("%c",*i);
i++;
k++;
}
printf("way");
}else{
k = 1;
i++;
while(*i!='\0'){
if(*i=='A'||*i=='a'||*i=='E'||*i=='e'||*i=='I'||*i=='i'||
*i=='O'||*i=='o'||*i=='U'||*i=='u'||*i=='Y'||*i=='y'){
break;
}
k++;
i++;
}
i = n + k;
char *r;
r = n;
while(*i!='\0'){
if(*n>=65&&*n<=90)
printf("%c",*i-32);
else
printf("%c",*i);
i++;
n++;
}
i = r;
m = 0;
while (m!=k){
if(*r>=65&&*r<=90)
printf("%c",*i+32);
else
printf("%c",*i);
m++;
i++;
}
printf("ay");
}
}

int main(){
char arr[16],*i,check[16];
i = check;
printf("Enter a word: ");
scanf("%s",arr);
while(1){
strcpy(check,arr);
if(strcmp(check,"exit")==0){
break;
}
else{
printf("\n\n");
toPigLatin(arr);
printf("\n\nEnter a word: ");
scanf(" %s",arr);
}
}
return 0;
}

-1

Решение

if(*r>=65&&*r<=90)
printf("%c",*i+32);

Это должно быть проверка *iне *r,

*r первая буква в слове пользователя, F и R соответственно. Так как первый буква является заглавной буквой, ваш код пытается преобразовать ток буква от заглавных до строчных.

Ваша программа должна проверять текущую букву вместо первой.

Тем не менее, есть гораздо более простой способ конвертировать буквы в нижний регистр. Вы могли бы просто использовать tolower от <ctype.h>:

printf("%c", tolower(*i));

Это будет работать, даже если буква уже строчная (она не меняет строчные буквы).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]