gpt4 book ai didi

c++ - C++提取和计数文本文件中的单词数

转载 作者:行者123 更新时间:2023-12-02 10:04:59 36 4
gpt4 key购买 nike

我的任务是从文本文件读取并计算单词数,同时将文本显示到控制台。每当我调用我的“getString”函数时,我的“numCount”都变为0。如果我对“getString”函数进行注释,则numCount显示正确的单词数。因此,两个函数看起来都像在它们都被调用时一样起作用,然后我遇到了这些问题。

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

using namespace std;

void getFileInfo(ifstream &inFile);
int numOfWords(ifstream& inFile); // counts number of words
string getString(ifstream &inFile); // retrieves string from textfile


int main(){

string fileName, words, str;
ifstream inFile;
int count;

getFileInfo(inFile);
str = getString(inFile);
count = numOfWords(inFile);

cout << "In the sentence, '" << str << "', there are " << count << " words " << endl;


}

void getFileInfo(ifstream &inFile){

string fileName;

do{

cout << "Please enter the filename: " << endl;
cin >> fileName;

inFile.open(fileName.c_str());

if(!inFile){

cout << "Invalid try again" << endl;

}
}while(!inFile);

}

int numOfWords(ifstream& inFile){

string fileName, words, str;
int numCount =0;

while(inFile >> words){
++numCount;
}

return numCount;

}

string getString(ifstream &inFile){

string str;

while(inFile)
getline(inFile, str);

return str;

}

最佳答案

您的问题是,您没有在getString()之后重置流

C++ iostream具有一种隐喻性的游标,在该游标中,您读取的每一位都将游标移至下一位(因此您无需手动移动游标即可读取它)。您代码中的问题是,光标位置最终在inFile之后的getString()末尾结束,这意味着getNumOfWords()中的循环永远不会运行。

您需要做的是在getString()之后重置流。例:

std::string getString(ifstream& inFile) {
...
inFile.clear() // <-- You may need this depending on your iostream implementation to clear the EOF failbit
inFile.seekg(0, ios::beg);

return str;

}

关于c++ - C++提取和计数文本文件中的单词数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60657480/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com