2013-02-09 157 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

相關問題