ループ中にダブルをしようとすると、コードがクラッシュするこれは私の宿題なので、アルゴリズムやstring
を使用することはできません。 char配列のみが許されます。 誰かが私にそれを解決するのを手伝ってもらえますか? 256
が一定であるため重複する単語を検索
#include <iostream>
#include <limits>
#include <cstring>
using namespace std;
int main()
{
const char sepTxt[] = ".,:;()!%^?<>- ";
int szTxt;
char *txt = new char[256];
cout << "Enter text length: ";
cin >> szTxt;
while(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "\nFail. Try again.\nEnter text length: ";
cin >> szTxt;
}
cin.ignore(1,'\n');
cout << "Enter text: ";
cin.getline(txt,szTxt);
while (cin.fail() || strlen(txt) < 1)
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "\nFail. Try again.\nEnter text: ";
cin.getline(txt,szTxt);
}
char *txtTmp = new char [szTxt]; //initialization dynamic arr for temp copy of entered text
strncpy(txtTmp, txt, szTxt); //copy entered text to txtTmp
char *bufTxt = strtok(txt, sepTxt); //find first word;
char resTxt[256] = {};
while (bufTxt) //crash here;
{
bufTxt = strtok(NULL, sepTxt);
while ((txtTmp = strstr(txtTmp, bufTxt)))
{
strcat(resTxt,bufTxt);
strcat(resTxt," ");
txtTmp+=strlen(bufTxt);
}
}
cout << "\nDouble words: " << resTxt;
delete []txt, txtTmp;
}
2番目のstrtokを実行し、NULLであるかどうかをチェックしません。 –
NULLをチェックしたり追加してもクラッシュします bufTxt = strtok(NULL、sepTxt);最後に –
おすすめ:テキストのサイズを知ってから 'char * txt = new char [szTxt];'に変更すると 'char * txt = new char [256];'に移動してください。少々厄介な驚き。おそらく1を加えるべきでしょう。奇数は、ユーザーがカウントにヌルターミネータを含めないことです。 – user4581301