0
char * piglatin(const char s[], int len) {
    char * result[len+3] = s[];
    char * current[len+3] = s[];
    if(s[0]=="o"||"u"||"e"||"a"||"i"){
        result[len-1] = "y";
        result[len-2] = "a";
        result[len-3] = "-";
    }
    else{
        for(int i = 0; i<len-1; i++){
            result[i] = current[i+1];
            result[len-1] = "-";
            result[len] = current[0];
            result[len+1] = "a";
            result[len+2] = "y";
        }
    }


    }

我在为我的计算机科学课做程序作业时遇到了一个问题。如果 s 的第一个字母是元音,教授希望我们在字符串 s 之后附加“-ay”,否则删除 s 的第一个字母并附加“-?ay”。我的错误出现在 "if(s[o]=="o"||"u"||"e"||"a"||"i")" 并且它说“指针和整数之间的比较 (' int' 和 'const char *')"。我感到困惑,因为 s 不是指针,右侧也不是整数。

4

3 回答 3

2

cmon 兄弟...对所有其他人使用'o'而不是“o”,并且在 if 语句中你必须将它们全部与 s[0] 像这样 s[0]=='o'||s[0]= 进行比较='u'||s[0]=='e'||s[0]=='a' 等等。但是你仍然会得到错误所以不要忘记返回指针的值:) 和 (const char s[]) s 是常数你将如何改变它!!!!!! 删除常量

于 2013-02-09T01:00:55.413 回答
0

这里有两个问题。编译器抱怨是因为s[0]is achar"o"(和其他)是指向 char 数组的指针(基本上)。要解决此问题,请替换"o"'o'.

但是还有一个更大的问题:您只是将 s[0] 与 'o' 进行比较。测试中的其他内容都将评估为 true:

    if(s[0]=='o'||s[0]=='u'||s[0]=='e'||s[0]=='a'||s[0]=='i'){
于 2013-02-09T00:46:26.453 回答
0

在下面,s[0]是一个字符 - 所以是整数的一种形式,其中"o"是一个字符串 - const char *- 所以你将一个字母“a”(或类似)与字符串“o”的地址进行比较。

if(s[0]=="o"||"u"||"e"||"a"||"i"){

你应该做:

if(s[0]=='o' ... )

然而,|| '你'并不意味着我认为你认为它意味着什么。由于没有任何字符(或代码中的字符串)为零/NULL,因此它们变为true,并且您的 if 语句将始终为真。

您需要有一个比较语句:

if(s[0] == 'o'|| s[0] == 'u' ... )
于 2013-02-09T00:52:53.917 回答