我的代码工作正常,除了" Flower"和" Rhythm"。输出结果是这样的:" Owerfiay"," Ythrmreay&#34 ;;在哪里"我"和" e"是我的帽子和电子帽。我尝试检查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;
}
答案 0 :(得分:2)
if(*r>=65&&*r<=90)
printf("%c",*i+32);
这应该是*i
,而不是*r
。
*r
是用户单词中的第一个字母,分别是F和R.由于第一个字母是大写字母,因此您的代码正在尝试将当前字母转换为大写字母。
您的程序需要检查当前的字母而不是第一个字母。
然而,这就是说,将字母转换为小写更容易。您可以使用tolower
中的<ctype.h>
:
printf("%c", tolower(*i));
即使字母已经是小写字母(它不会改变小写字母),这也会有效。