尝试返回 c++ 输入文件的大小,但在将 char 变量转换为字符串时收到错误

Posted

技术标签:

【中文标题】尝试返回 c++ 输入文件的大小,但在将 char 变量转换为字符串时收到错误【英文标题】:Trying to return size of input file of c++ but recieve an error when I convert the char variable to string 【发布时间】:2014-11-22 13:45:14 【问题描述】:

我正在尝试计算程序中的字符数。最初我的变量“words”是一个字符,文件读取得很好。当试图确定变量的长度时,它不适用于.length()。你能解释一下如何将我的“words”变量作为字符串,以便words.length() 正确执行吗?

words = readFile.get(); 线上的错误是:

“words != -0x00000000000000001”中的“operator!=”不匹配

#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <string>
#include <stdio.h>
#include <math.h>
using namespace std;

int main() 

//buff array to hold char words in the input text file
string words;

//char words;

//read file
ifstream readFile("TextFile1.txt");
//notify user if the file didn't transfer into the system
if (!readFile)
    cout <<"I am sorry but we could not process your file."<<endl;

//read and output the file
while (readFile)

    words = readFile.get();
    if(words!= EOF)
      cout <<words;


cout << "The size of the file is: " << words.length() << " bytes. \n";

return 0;

【问题讨论】:

你有没有尝试检查get函数的签名... 阅读例如this std::istream::get reference. 你真的需要一个字符串来计算字符数吗?这肯定不会像你想的那样工作。我的意思是即使得到正确的签名,你也会替换循环的每个输入的字符串。 【参考方案1】:
char c;
while (readFile.get(c))

    words.insert(c);

当然,如果您这样做只是为了计算字符数(并且打算使用 std::istream::get),那么您最好这样做:

int NumChars = 0;
while (readFile.get())

    NumChars++;

哦,顺便说一下,您可能想在完成文件后关闭它。

【讨论】:

【参考方案2】:

您应该阅读一些参考资料。尝试cppreference.com 并查找std::instream::get


我不确定你想要什么,但如果你只想数单词,你可以这样做:

std::ifstream InFile(/*filename*/);
if(!InFile)
    // file not found

std::string s;
int numWords = 0;

while(InFile >> s)
    numWords++;

std::cout << numWords; 

或者如果您想知道文件中有多少个字符,请将std::string s 更改为char s 并改用std::ifstream::get

std::ifstream InFile(/*filename*/);
if(!InFile)
    // file not found

char s;
int numCharacters = 0;

while(InFile.get(s)) //this will read one character after another until EOF
    numCharacters++;

std::cout << numCharacters; 

第二种方法更简单: 如果文件使用ASCIInumCharacters == fileSize; 否则如果它使用UNICODEnumCharacters == fileSize / 2;

【讨论】:

【参考方案3】:

get() 返回一个 int,要执行您正在执行的操作,您必须在附加到“words”之前检查该 int,而不是根据 EOF 检查单词,例如:

...
//read and output the file
while (readFile)

    const int w = readFile.get();
    if (w!= EOF) 
      words += w;
      cout <<words;
    

...

【讨论】:

以上是关于尝试返回 c++ 输入文件的大小,但在将 char 变量转换为字符串时收到错误的主要内容,如果未能解决你的问题,请参考以下文章

C++ 如何创建一个需要输入大小的数组

运算符==不能应用于java.lang.String char

c++ 将 argv 读入 unsigned char 固定大小:分段错误

不存在从“const std::string”到“char *”的合适转换函数?

使用 C++ 通过 TCP 发送文件,接收错误的大小

C ++有符号字符加倍