【发布时间】:2017-05-06 09:17:57
【问题描述】:
我的代码工作正常,除了“花”和“节奏”。输出结果是这样的:“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;
}
【问题讨论】:
-
ASCII码65和90对应
A和Z,所以你可以把你的条件写成if ( *r >= 'A' && *r <= 'Z' )。您的代码是纯 C 语言,顺便说一句。 -
在 2017 年,这段代码看起来很奇怪,就像试图通过摩擦着火......
-
你应该给出一个系统工作的单词列表,以及系统不能工作的两个单词列表。另外,请解释“其中“i”和“e”分别是 i-cap 和 e-cap 的含义。
-
@Bob__ -- 使用
isupper,而不是建立对ASCII的依赖;它适用于系统正在使用的字符编码。
标签: c++ apache-pig flower