0

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;
}
4

1 に答える 1

2

std::stringchar*あなたの qsort 比較関数がふりをするので、はありません。また、C++ オブジェクトで qsort を使用しないでください。qsort はオブジェクトを認識せず、コピー コンストラクターを呼び出さず、内部構造を損傷する可能性があります。

i=0 の場合、list[i-1] の使用はバグです。

並べ替え後に重複する単語をカウントする必要があります。そうしないと、重複が隣り合っているという保証がありません。

于 2013-04-24T18:59:35.667 に答える