3

C ++でテキストファイル内の文字を数えようとしていますが、これはこれまでのところ、何らかの理由で4を取得しています.123456文字が含まれています。文字を増やしたり減らしたりしても、まだ 4 になります。助けてください。事前に感謝します

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

const char FileName[] = "text.txt";

int main () 
{
string line;
ifstream inMyStream (FileName); 
int c;

if (inMyStream.is_open()) 
{

     while(  getline (inMyStream, line)){

             cout<<line<<endl;
              c++;
  }
    }
    inMyStream.close(); 

system("pause");
   return 0;
}
4

7 に答える 7

5

あなたは行を数えています。
文字を数える必要があります。次のように変更します。

while( getline ( inMyStream, line ) )
{
    cout << line << endl;
    c += line.length();
}
于 2012-05-23T00:58:01.063 に答える
4

それを行うには、おそらく何百もの方法があります。最も効率的なのは次のとおりだと思います。

    inMyStream.seekg(0,std::ios_base::end);
    std::ios_base::streampos end_pos = inMyStream.tellg();

    return end_pos;
于 2012-05-23T01:06:07.910 に答える
1

まず、ローカル変数を初期化する必要があります。これは、次のことを意味します int c = 0;int c;

get()昔ながらの分かりやすい方法は、最後まで関数を使うことだと思いますEOF

    char current_char;
    if (inMyStream.is_open()) 
        {

            while(inMyStream.get(current_char)){

                if(current_char == EOF)
                {
                    break;
                }
                c++;
            }
        }

次にc、文字数になります

于 2012-05-23T01:30:55.603 に答える
1

これは私が問題にアプローチする方法です:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;


int main () 
{
string line;
int sum=0;
ifstream inData ;
inData.open("countletters.txt");

while(!inData.eof())
{
getline(inData,line);

    int numofChars= line.length();
    for (unsigned int n = 0; n<line.length();n++)
    { 
    if (line.at(n) == ' ')
    {
    numofChars--;
    }
    }
sum=numofChars+sum;
}
cout << "Number of characters: "<< sum << endl;
    return 0 ;
}
于 2013-11-04T01:34:18.697 に答える
0

古き良き C FILE ポインターを使用するだけです。

int fileLen(std::string fileName)
{
    FILE *f = fopen(fileName.c_str(), "rb");

    if (f ==  NULL || ferror(f))
    {
        if (f)
            fclose(f);

        return -1;
    }

    fseek(f, 0, SEEK_END);
    int len = fell(f);

    fclose(f);

    return len;
}
于 2012-05-23T01:00:43.200 に答える
0

この簡単な方法を見つけました。これが役立つことを願っています

while(1)
    {
        if(txtFile.peek() == -1)
            break;
        c = txtFile.get();
        if(c != txtFile.eof())
                    noOfChars++;
    }
于 2013-08-02T19:19:34.167 に答える