我试着用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;
}
答案 0 :(得分:5)
你在计算线数 你应该统计人物。将其更改为:
while( getline ( inMyStream, line ) )
{
cout << line << endl;
c += line.length();
}
答案 1 :(得分:2)
可能有数百种方法可以做到这一点。 我认为效率最高的是:
inMyStream.seekg(0,std::ios_base::end);
std::ios_base::streampos end_pos = inMyStream.tellg();
return end_pos;
答案 2 :(得分:2)
这就是我如何处理这个问题:
#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 ;
}
答案 3 :(得分:1)
首先,你必须初始化一个本地var,这意味着:
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
将是字符数
答案 4 :(得分: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;
}
答案 5 :(得分:0)
我发现了这个简单的方法,希望这有帮助
while(1)
{
if(txtFile.peek() == -1)
break;
c = txtFile.get();
if(c != txtFile.eof())
noOfChars++;
}
答案 6 :(得分: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;
}