0

はい、現在ベクトルを学んでいます。テキストファイルを読み込んで、ユニークな単語の数を数え、テキストファイルを出力しようとしています(後で行います)。何が起こっているのか、なぜ/どのように修正するのかを理解するのに助けを借りることができますか?

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include<vector>
using namespace std;
string toLower(string str);
string eraseNonAlpha(string Ast);
string  wordWasher(string str);
int countUniqenum(vector<string>&v);
int main()
{   
    ifstream inputStream; //the input file stream
    string word; //a word read in from the file
    string words=wordWasher(word);
    inputStream.open("alpha.txt");
    if (inputStream.fail())
    {
        cout<<"Can't find or open file"<<endl;
        cout<<"UR a loser"<<endl;
        system("pause");
        return 0;
    }//end if

    while (!inputStream.eof())
    {
        inputStream>>words;

    }//end loop

    vector<string> v;
    v.push_back(words);
    int unique =countUniqenum(v);
    cout<<unique<<endl;
    inputStream.close();

system("pause");
return 0;

}

string toLower(string str)
{

       for(int i=0;i<str.length();i++)
       {
               if (str[i]>='A'&& str[i]<='Z')
                 str[i]=str[i]+32;
       }
     return str;
}
string eraseNonAlpha(string str)
{
    for(int i=0;i<str.length();i++)
    {
        if(!((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z'))) 
        {str.erase(i,1);
        i--;
    }   
    }
    return str;
}

string  wordWasher(string str)
{   str=eraseNonAlpha(str);
    str=toLower(str);
    return str;
}                               
int countUniqenum(vector<string>&v)
{ int count=0;
  for(int i=0;i<v.size();i++)
  {
          if(v[i]!=v[i+1])
          count++;
  }     
  return count;
}  
4

3 に答える 3

2

あなたは間違いなくここで限界を超えています:

for(int i=0;i<v.size();i++)
{
      if(v[i]!=v[i+1])
//               ^^^

他のエラーがある可能性があります。

于 2013-06-11T20:56:11.933 に答える
1

ラインif(v[i]!=v[i+1])です。ループを最後に通過しv[i]たとき、 はベクトルの最後の要素であり、最後v[i+1]から外れています。

簡単な修正は、ループを に変更することfor(int i = 0; i < v.size() - 1; i++)です。関数が本当にやりたいことを実行するかどうかはわかりませんが、少なくともクラッシュを取り除くことができます。

于 2013-06-11T20:59:49.880 に答える
0

これが機能するためにベクトルを並べ替える必要はありません..隣接する単語が同じかどうかを確認しているだけです

if(v[i]!=v[i+1])
于 2013-06-11T21:06:37.760 に答える