2013-02-09 115 views
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不是指针,右边也不是整数。有一个错误显示为“指针和整数之间的比较('int'和'const char *')”

+0

您必须将s [0] ==放在每个或每个if后面 - 并且对于常量使用单引号('),而不是双引号(“)。 – 2013-02-09 00:46:32

+0

这只是无效的C++。禁用编译器扩展(GCC通过'-std = C++ 11'来实现),并启用警告和迂腐解析。 – 2013-02-09 00:55:39

+0

将标记更改为'c',因为这不是在这里进行的C++类型的事情... – 2013-02-09 00:58:14

回答

0

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

虽然有一个更大的问题:你只比较s [0]和'o'。在测试中其他的事情都将计算为真:

if(s[0]=='o'||s[0]=='u'||s[0]=='e'||s[0]=='a'||s[0]=='i'){ 
+1

和固定的开始。我敢肯定还有其他的事情在上面awating被发现,虽然... – 2013-02-09 00:49:08

+0

不知道我是如何错过 – SirPentor 2013-02-09 00:50:43

+1

NP - 我拿走了我的东西还有投票。我仍然不喜欢上面所有的数组-1垃圾。味道真坏。也许另一个数组覆盖在那里。太累了,但它寻找它:) – 2013-02-09 00:52:37

0

在下文中,s[0]是char - 这样一个整数的形式,其中"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' ...) 
0

CMON哥哥......“O”不是“O”用于所有其他人在if语句,你必须将它们都比较S [0 ] like this s [0] =='o'|| s [0] =='u'|| s [0] =='e'|| s [0] =='a',依此类推。但你仍然会得到错误,所以不要忘记返回一个指针值:)和(const char s [])s是常量,你将如何改变它!!!!!!删除const

相关问题