将变量与txt文件中的每一行进行比较

时间:2014-04-25 00:27:58

标签: c++ string loops

我必须将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 ++很新。一个学生

3 个答案:

答案 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)

你正在文件中的每个行标记上运行一个循环,你要求用户猜测,直到他放弃每个?很好,但不是你说的。

你想做什么:

  1. 阅读文件,将其解析为保存在std::unordered_set中的文字代币。
  2. 然后询问用户哪个词应该匹配。
  3. 要求std::unordered_map透露其秘密。
  4. 试试吧。

答案 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);
}

此代码可以正常工作。