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 文件指针:

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 回答
0

这肯定有效,它旨在逐个字符地阅读。

它可以很容易地放入一个类中,您可以为每个字符应用函数,因此您可以检查“\n”、“”等。只要在你的班级中有一些成员,他们可以保存在那里,所以你可能只返回 0 并使用方法来获得你想要的东西。

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

unsigned long int count(std::string string)
{
    char c;
    unsigned long int cc = 0;

    std::ifstream FILE;
    FILE.open(string);
    if (!FILE.fail())
    {
        while (1)
        {
            FILE.get(c);
            if (FILE.eof()) break;
            cc++; //or apply a function to work with this char..eg: analyze(c);
        }
        FILE.close();
    }
    else
    {
        std::cout << "Counter: Failed to open file: " << string << std::endl;
    }

    return cc;
};

int main()
{
    std::cout << count("C:/test/ovecky.txt") << std::endl;

    for (;;);

    return 0;
}
于 2018-10-28T12:56:18.917 回答