C++中的猪拉丁语,“花”和“节奏”的一些错误
我的代码运行良好,除了花儿和节奏。输出结果如下:Owerfiay,Ythrmreay;其中i和e是i-cap和e-cap。我试着检查ASCII表,以防在某个地方出错,但在表中找不到这两个。我的C++知识有限,所以当我尝试在这里和其他地方阅读一些现有的线程时,我跟不上它们。 这是我的密码:C++中的猪拉丁语,“花”和“节奏”的一些错误,c++,apache-pig,flower,C++,Apache Pig,Flower,我的代码运行良好,除了花儿和节奏。输出结果如下: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;
#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;
}
即使字母已经是小写字母,它也不会更改小写字母。ASCII代码65和90对应于A和Z,因此,您可以编写您的条件,就像2017年的*r>='A'&&*r一样。这段代码看起来很奇怪,因为它试图通过摩擦获得火焰……您应该给出一个系统工作的单词列表,以及它不工作的两个单词列表。另外,请解释你所说的“i和e是i-cap和e-cap的位置”是什么意思。@Bob___-使用isupper,而不是构建对ASCII的依赖关系;它适用于系统使用的字符编码。谢谢。我又看了一遍,在while循环中添加了r++。现在修好了。
if(*r>=65&&*r<=90)
printf("%c",*i+32);
printf("%c", tolower(*i));