尝试返回 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函数的签名... 阅读例如thisstd::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;
第二种方法更简单:
如果文件使用ASCII
,numCharacters == fileSize;
否则如果它使用UNICODE
,numCharacters == 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 变量转换为字符串时收到错误的主要内容,如果未能解决你的问题,请参考以下文章
运算符==不能应用于java.lang.String char
c++ 将 argv 读入 unsigned char 固定大小:分段错误