2011-03-10 135 views
0

在點亮手電筒之前,我試圖自學C++。我覺得我已經掌握了它,但如果你明白我的意思,我必須深入探索。我試圖調試一個簡單的程序,我試圖讓自己教。這個程序的目標是按字母順序排列每一列中打印的字符串數組。在將數組傳遞給我的length()函數時,我可能應該在這裏使用指針,但是我還沒有得到那麼多。有太多的錯誤,我不確定錯誤的實際位置。請告訴我這是一個缺少的分號。我很確定if(itemsToSort [j] < firstInAZOrder)行將不起作用,但我試圖學習語言,我必須從某處開始。按字母順序排列字符串數組的問題

main.cpp中:

#include <iostream> 
#include "stringarray.h" 

void output (int sortedItems) { 
    for (int i = 0; ; i++) { 
     std::cout << sortedItems[i] << std::endl; 
    } 
} 

int main (int argc, char * const argv[]) { 
    std::string itemsToSort[] = { 
     'bob', 'john', 'tyler', 'anthony', 'luke', 'eric' 
    }; 
    std::string sortedItems[length(itemsToSort)]; 
    string firstInAZOrder; 

    for (int i = 0; i < length(itemsToSort); i++) { 
     firstInAZOrder = itemsToSort[i]; 

     for (int j = i + 1; j < length(itemsToSort); j++) { 
      if (itemsToSort[j] < firstInAZOrder) { 
       firstInAZOrder = itemsToSort[j]; 
      } 
     } 

     sortedItems[i] = firstInAZOrder; 
    } 

    output(sortedItems); 
    return 0; 
} 

stringarray.cpp:

int length (std::string array) { 
    return sizeof(array)/sizeof(array[0]); 
} 

stringarray.h:

int length (std::string array); 

這是錯誤和警告的Xcode的名單給我:

  • /Users/Tyler/Desktop/sort/main.cpp:12:3:警告:多字符字符常量 -
  • /Users/Tyler/Desktop/sort/main.cpp:12:18:warning:character常量太長其類型
  • /Users/Tyler/Desktop/sort/main.cpp:12:27:警告:字符常量太長,其類型
  • /Users/Tyler/Desktop/sort/main.cpp :在函數'void output(int)'中:
  • /Users/Tyler/Desktop/sort/main.cpp:6:錯誤:數組下標爲無效類型'int [int]'
  • /Users/Tyler/Desktop/sort/main.cpp:在函數'int main(int,char * const *)'中:
  • /Users/Tyler/Desktop/sort/main.cpp:13:錯誤:無效從'int'轉換爲'const char *'
  • /Users/Tyler/Desktop/sort/main.cpp:13:error :初始化參數1'std :: basic_string < _CharT,_Traits,_Alloc> :: basic_string(const _CharT *,const _Alloc &)[with _CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]'
  • /Users/Tyler/Desktop/sort/main.cpp:13:錯誤:從'int'無效轉換爲'const char *'
  • /Users/Tyler/Desktop/sort/main.cpp:13:錯誤:初始化參數1'std :: basic_string < _CharT,_Traits,_Alloc> :: basic_string(const _CharT *,const _Alloc &)[with _CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]'
  • /Users/Tyler/Desktop/sort/main.cpp:13:error:invalid conversion from'int'to 'const char *'
  • /Users/Tyler/Desktop/sort/main.cpp:13:error:初始化參數1的'std :: basic_string < _CharT,_Traits,_Alloc> :: basic_string(const _CharT *,const _Alloc &)[with _CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]'
  • /Users/Tyler/Desktop/sort/main.cpp:13:error:'int' 'const char *'
  • /Users/Tyler/Desktop/sort/main。cpp:13:error:初始化參數1'std :: basic_string < _CharT,_Traits,_Alloc> :: basic_string(const _CharT *,const _Alloc &)[with _CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]'
  • /Users/Tyler/Desktop/sort/main.cpp:13:error:從'int'無效轉換爲'const char *'
  • /Users/Tyler/Desktop/sort/main .cpp:13:error:初始化參數1'std :: basic_string < _CharT,_Traits,_Alloc> :: basic_string(const _CharT *,const _Alloc &)[with _CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]'
  • /Users/Tyler/Desktop/sort/main.cpp:13:error:從'int'無效轉換爲'const char *'
  • /Users/Tyler/Desktop/sort/main.cpp:13:error:初始化參數1'std :: basic_string < _CharT,_Traits,_Alloc> :: basic_string(const _CharT *,const _Alloc &)[with _CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]'
  • /Users/Tyler/Desktop/sort/main.cpp:14:error:從'std :: string *'轉換爲非-scalar type'std :: string'requested
  • /Users/Tyler/Desktop/sort/main.cpp:15:error:'string'was not declared in this scope
  • /Users/Tyler/Desktop/sort /main.cpp:15:錯誤:預計爲';' before'firstInAZOrder'
  • /Users/Tyler/Desktop/sort/main.cpp:17:error:從'std :: string *'轉換爲非標量類型'std :: string'請求
  • /Users /Tyler/Desktop/sort/main.cpp:18:錯誤:'firstInAZOrder'未在此範圍內聲明
  • /Users/Tyler/Desktop/sort/main.cpp:20:錯誤:從'std ::字符串*'到非標量類型'std :: string'請求
  • /Users/Tyler/Desktop/sort/main.cpp:26:錯誤:'sortedItems'未在此範圍內聲明
  • /Users/Tyler/Desktop/sort/main.cpp:29:error:'sortedItems'未在此範圍內聲明
  • /Users/Tyler/Desktop/sort/stringarray.cpp:10:error:'string'不是'std'的成員
  • /Users/Tyler/Desktop/sort/stringarray.cpp:10:error:預期','或';'之前,「{」令牌

回答

3

首先:

std::string itemsToSort[] = { 
    'bob', 'john', 'tyler', 'anthony', 'luke', 'eric' 
}; 

的引號(')只能在單個字符被使用。 使用雙引號(「)本:

std::string itemsToSort[] = { 
    "bob", "john", "tyler", "anthony", "luke", "eric" 
}; 

下一頁:

void output (int sortedItems) { 
    for (int i = 0; ; i++) { 
     std::cout << sortedItems[i] << std::endl; 
    } 
} 

這個函數有一個整數,這是不是你想要的所有假設您想了解如何。使用指針,你可以嘗試這樣的:

void output (int* intArray, int arraySize) { 
    for (int i = 0; i < arraySize; ++i) { 
     std::cout << intArray[i] << std::endl; 
    } 
} 

該函數接受一個指向某個數量的內存整數,並且在那裏數這解決了知識的下一個問題。當您的for循環應該終止時。

在實際代碼中,您將使用類似std::vector的東西來代替int*

+0

謝謝。我沒有意識到引號是重要的。 – 2011-03-10 20:50:00

4

字符串常量應該是雙引號,不是單引號:

"bob" 

單引號字符常量。

然後,

int length (std::string array) { 
    return sizeof(array)/sizeof(array[0]); 
} 

應採取數組作爲輸入,但即使如此,將無法工作,不能由使其成爲一個宏(這是爲了讓你從禁止一種肯定的方式來固定,除了C++專家協會十年)或者通過模板函數來實現,這可能有點高級。相反,使用std::vector,它有一個size方法。

最後,

void output (int sortedItems) { 
    for (int i = 0; ; i++) { 
     std::cout << sortedItems[i] << std::endl; 
    } 
} 

並沒有真正採取int,不是嗎?循環中的停止條件也是很好的,以防止諺語龍飛出你的鼻子。

+0

幫助了很多。:) – 2011-03-10 20:51:35

+1

找到一個數組的大小很簡單:'template int length(const T(&)[N]){return N;}' – 2011-03-10 20:54:36

+0

它更容易找到'std :: string'的長度:'s.length()'。 – 2011-03-10 21:00:17

0

只是修復一次錯誤一個 -

第一個是因爲你需要雙引號(「)不是單引號(')

第二個 - 嘗試INT * sortedItems

只需要一次一個地修改它們,編譯完成後,調試器將成爲你的朋友

+0

謝謝。這減少了一半的錯誤。 – 2011-03-10 20:49:17