我寫了以下嘗試使用qsort()函數。我的目標是輸入幾行文本並打印每個單詞的字母列表。這段代碼每次運行時崩潰,我不知道爲什麼或者如何修復它。我還需要添加一些內容來計算單詞出現的次數,並將其打印出來,但我非常確定該怎麼做。任何建議都會非常有幫助。謝謝!C + + qsort問題
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
struct to_lower
{
int operator() (int ch)
{
return tolower (ch);
}
};
int compare (const void * a, const void * b)
{
//return (*(int*)a - *(int*)b);
return (strcmp(*(const char **)a, *(const char **)b));
}
int main()
{
string list[900];
int nLength;
int i=0, q=0;
string nTemp;
int word[900];
cout
<< "Enter some lines of text "
<< "(Enter Ctrl-Z on a line by itself to exit)\n"
<< endl;
while (!cin.eof())
{
cin >> list[i];
transform(list[i].begin(), list[i].end(), list[i].begin(), to_lower());
word[q]=1;
if (list[i]==list[i-1])
{
word[q]=+1;
}
i++;
}
nLength = i;
cout << "The sorted words would be:\n";
qsort(list, nLength, sizeof list[0],&compare);
int n;
for (n = 0; n < nLength; n++)
{
cout <<" \n"<< n << list[n]<< word[n];
}
return 0;
}
當i = 0時,您正試圖訪問'list [i-1]',並給出了一個負索引。崩潰的可能原因。 – Mahesh 2013-04-24 18:56:27
這是C假裝C++。如果你真的想編寫C++,可以使用'std :: vector',並編寫自己的'std :: less'或'operator <'實現,這將使你能夠使用'std :: sort'。 – 2013-04-24 18:56:57
在發佈之前,請花費幾分鐘的時間仔細檢查代碼的縮進情況。它需要修復:您可以通過點擊帖子下方的「修改」來編輯您的問題來完成此操作。 – Lundin 2013-04-24 19:12:14