C ++将文件行传递给字符串向量

Posted

技术标签:

【中文标题】C ++将文件行传递给字符串向量【英文标题】:C++ passing file lines to a vector of strings 【发布时间】:2013-11-04 05:09:36 【问题描述】:

我的代码应该将 txt 文件中的信息传递给字符串向量,然后要求用户输入并将其与字符串向量进行比较以查看是否有任何匹配项。出于某种原因,当我在输入文件上输入一行时,它与字符串向量不匹配。这是我的代码

提前谢谢你

/*You are going to keep track of user majors using a vector.

First read in the file:

http://www.freerschool.com/pluginfile.php/9623/mod_resource/content/1/MajorsFull.txt

Enter each major into a vector of strings.

Ask the user to keep entering in possible majors until they enter "quit" or "Quit".

Create a function:

bool checkMajor(string userInput)

that takes in the major from the user (as a string) and returns true if the major is in the list of possible majors and a false if the major is not there.

Display to the screen whether or not the major they entered is available in the file of majors.

Hint:

for(string line; getline( input, line ); )

 //Read in the line into the vector!
*/
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

bool checkMajor(string userInput, vector<string>majorsFull)
    bool answer = true;
    string major;
    for(int i = 0; i < majorsFull.size(); i++)
        if (majorsFull[i] == userInput)
                answer = true;
                break;
        
        else answer = false;
    
    return answer;


int main()

    ifstream infile;
    infile.open ("MajorsFull.txt");

    vector<string> majorsFull;
    string userInput;

    for (string majors; getline(infile, majors);)
        majorsFull.push_back(majors);
    

    do

    

    getline(cin, userInput);

    if (userInput != "Quit" && userInput != "quit")


    if (checkMajor(userInput, majorsFull))
    
            cout << "Yes" << endl;
    

    else cout << "No" << endl;

    

    else break;

    


    while (userInput != "Quit" && userInput != "quit");

    infile.close();

    return 0;

以下是文件包含的几行内容:

Accounting
Accounting
Actuarial Science
Advertising
Advertising
African American and African Studies
African American and African Studies
Agribusiness Management
"Agricultural, Food and Resource Economics"
"Agricultural, Food and Resource Economics"
Animal Science
Animal Science
Animal Science
Animal Science-Environmental Toxicology
Anthropology
Anthropology
Applied Engineering Sciences
Applied Mathematics
Applied Mathematics
Applied Spanish Linguistics
Applied Statistics
Arabic
Art Education
Art History and Visual Culture
Arts and Humanities
Astrophysics
Astrophysics and Astronomy
Astrophysics and Astronomy

【问题讨论】:

即使我在 txt 文件中准确地放了内容,它也不匹配任何东西 你能发布几行文件包含的示例吗? 刚刚从txt贴了几行 如果你一直这样写你的 if/else 语句,你总有一天会犯错,而找出问题所在将是一场噩梦。 checkMajor 中,您需要在找到答案时退出循环,否则您可能最终会返回 false。 【参考方案1】:

问题在于,在checkMajor() 中,即使您发现用户输入了文件中存在的答案,您仍会继续检查可能的答案,因此您的for 循环应该是:

for(int i = 0; i < majorsFull.size(); i++)
    if (majorsFull[i] == userInput) return true;


return false;

【讨论】:

【参考方案2】:

你的问题出在下面的函数中,我已经修复了。在你的代码中,如果最后一行不匹配,它总是返回 false。

bool checkMajor(string userInput, vector<string>majorsFull)
    bool answer;
    string major;
    for(int i = 0; i < majorsFull.size(); i++)
        if (majorsFull[i] == userInput) return answer = true;
        //else answer = false;
    
    return false;

【讨论】:

出于某种原因,它仍然给了我相同的答案 我也尝试了 txt 文件的最后一行,但它没有工作 但是当我尝试使用最后一行以及您的代码时它可以工作。哦,这不是问题。当 for 循环找到它匹配时,它应该停止。 在将答案设置为 true 后我已经尝试过休息,但仍然无法正常工作 我尝试“会计是艺术和人文学科是天体物理学和天文学 d 否”农业、食品和资源经济学“是农业、食品和资源经济学不”它有效。我认为您的原始代码是正确的。你区分大写和小写了吗?

以上是关于C ++将文件行传递给字符串向量的主要内容,如果未能解决你的问题,请参考以下文章

指针数组内容在传递给 C 中的函数时被擦除

c ++分段错误将指针传递给函数

C++ 通过引用传递向量字符指针

将命令行参数和文本文件传递给程序

C++ 将向量传递给重载类 - 有些调用语句有效,有些则无效。

c/c++,mfc:不将打开的文件/句柄传递给生成的进程