在文本文件中搜索特定的用户输入字符串

时间:2016-04-30 00:16:08

标签: c++ string

我试图编写一个程序,打开一个充满单词的text文件("字典"减去定义)并将这些值存储在字符串中,以便将它们与a进行比较用户输入以确定用户输入是否拼写正确。

我开始工作并做我想做的事,但我似乎无法找出一个具体的细节。我希望程序继续运行,直到用户输入"退出"作为输入。唯一的问题是,我的计划会继续无限地喷出"input is spelled correctly""input is not spelled correctly",而不会让用户有机会输入更多的值。

如何使程序只输出这两个选项中的一个,然后提示用户输入另一个输入而不是同一个语句的永无止境的流?先谢谢你了!

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    string line; //holds values from txt file
    string input; //holds user-inputted values
    ifstream inputFile; //fstream operator declaration
    bool isFound = false; //bool value to indicate if the string has been found

    inputFile.open("dict.txt", ios::in);

    if (inputFile)
    {
        cout << "Enter word to spellcheck (or exit to end)\n";
        getline(cin, input);

        while (input != "exit")
        {
            while (getline(inputFile, line))
            {
                if (input == line)
                {
                    isFound = true;
                    break;
                }
                else
                {
                    isFound = false;
                }
            }

            inputFile.close();

            if (isFound)
            {
                cout << input << " is spelled correctly.\n";
            }

            else
            {
                cout << input << " is not spelled correctly.\n";
            }
        }

        if (input == "exit")
        {
            cout << "Ending program...\n";
        }
    }

    else
    {
        cout << "Cannot open file\n";
    }

    return 0;
}

2 个答案:

答案 0 :(得分:0)

的正文内部
 NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.aboutMeTap), name: "about", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.educationTap), name: "education", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.projectsTap), name: "projects", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.whyPressed(_:)), name: "why", object: nil)

循环永远不会要求用户更新输入值。将while (input != "exit") 移入while状态,如下所示:

getline(cin, input)

将解决这个问题。

然后下一个问题是处理字典文件。它在循环中间关闭,因此后续读取将立即失败。 OP可以使用inputFile.seekg(0);将读指针重置为文件的开头,但为什么每次都重新读取文件。

而是将字典文件读入std::set,其代码与搜索中使用的代码大致相同:

while (getline(cin, input) && input != "exit")

在程序的开头,在循环中搜索用户输入的集合。

std::set<std::string> dictionary;
while (getline(inputFile, line))
{
    dictionary.insert(line);
}

答案 1 :(得分:0)

这应该可以解决问题,你只需要在while循环中移动你的getline块,并在while循环之外移动文件close语句:

class classOne {
    public float x;
    public float y;
    public float Z;

    public classOne() {
        x = 0;
        y = 0;
        z = 0;
    }

    public classOne(float X, float Y, float Z) {
        x = X;
        y = Y;
        z = Z;
    }
}
class classTwo {
    public classOne a;
    public classOne b;
    public classOne c;


    public classTwo() {
        a = new classOne();
        b = new classOne();
        c = new classOne();
    }

    public IEnumerator GetEnumerator() {
        return (IEnumerator)this; 
        //Error: InvalidCastException: Cannot cast from source type to destination type.
    }
}