我必须将txt文件的每一行与用户输入变量进行比较。 如果用户输入词存在于txt文件中,则应提示用户"该词存在。"如果没有,则退出程序。
这就是文本文件的样子:
hello
hey
wow
your
这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream file("words.txt");
string content;
string userinput;
while(file >> content) {
cout << content << endl; // gets all the lines from the txt file
while(userinput != "exit") {
// asks user for input
cin >> userinput;
// compares two inputs
if (userinput == content)
{
cout << "The word exists." << endl;
} else {
break;
}
if (userinput == "exit") {
break;
}
}
}
return 0;
}
它不适合我。我能够返回txt文件中的所有单词,但无法将用户输入文本与txt文件中的txt行进行比较。任何帮助都会很棒。谢谢!
更新的代码:
while(iFile >> content) {
while(userinput != "exit") {
// asks user for input
cin >> userinput;
// compares two inputs
if (content.find(userinput) != std::string::npos)
{
cout << "The word exists." << endl;
} else {
break;
}
if (userinput == "exit") {
break;
}
}
}
P.S:我对c ++很新。一个学生
答案 0 :(得分:0)
当你写作时:
// compares two inputs
if (userinput == content)
您确实在检查用户是否在内容中输入了完全文本。你想要的是检查userinput是否包含在内容中:
// check if the userinput is found in the text
if(content.find(userinput) != std::string::npos)
您还需要阅读完整的文件。现在,每当您询问用户的输入时,您都会从输入文件中读取。
#include <iostream>
#include <fstream>
#include <memory>
#include <sstream>
#include <sys/types.h>
#include <sys/stat.h>
inline static bool fileExists(const std::string& name) {
struct stat buffer;
return (stat (name.c_str(), &buffer) == 0);
}
/// Read the file content and return as a string
static std::string readFile(const std::string &filename)
{
std::ifstream t(filename);
std::stringstream buffer;
buffer << t.rdbuf();
return buffer.str();
}
int main() {
std::string filename("words.txt");
if(!fileExists(filename))
// print error
return -1;
string content = readFile(filename);
string userinput;
... // handle userinput from now
请注意,这是低效的。由于您的文本始终相同而您正在重复搜索,因此可以对其进行预处理。有多种数据结构可以提供帮助。例如,您可以使用哈希映射并将每行填充为键。
答案 1 :(得分:0)
你正在文件中的每个行标记上运行一个循环,你要求用户猜测,直到他放弃每个?很好,但不是你说的。
你想做什么:
std::unordered_set
中的文字代币。std::unordered_map
透露其秘密。试试吧。
答案 2 :(得分:0)
#include <string>
#include <iostream>
#include <fstream>
#include <unordered_set>
using namespace std;
int main()
{
fstream file("wy.txt");
string line;
unordered_set<string> res;
while(file>>line)
{
res.insert(line);
}
do
{
cout<<"Please input the word: "<<endl;
string str;
cin>>str;
if (res.find(str) != res.end())
cout << "The word exists." << endl;
else
break;
} while (true);
}
此代码可以正常工作。