C ++。如何从文件中读取并与输入匹配

时间:2013-10-08 09:57:35

标签: c++ visual-c++ c++11

我正在尝试阅读文本文件并将水果与我所拥有的类型相匹配(例如,我输入苹果,它将搜索文本文件中的单词apple并匹配它并输出它已被发现)但我正在努力实现我想要的结果,因此需要帮助。

我有一个文本文件(fruit.txt),内容如下所示

苹果,30

香蕉,20

梨,10,


这是我的代码

string fruit;
string amount;
string line = " ";
ifstream readFile("fruit.txt");
fstream fin;

cout << "Enter A fruit: ";
cin >> fruit;

fin >> fruit >> amount;
while (getline(readFile, line,','))
    {
        if(fruit != line) {
            cout <<"the fruit that you type is not found.";
        }

       else {
           cout <<"fruit found! "<< fruit;
       }
}

请指教 感谢。

2 个答案:

答案 0 :(得分:0)

在使用getline的循环中,您将"apple"读入line第一个循环,将"30\nbanana"读入line第二次等等。

而是阅读整行(使用getline),然后使用例如std::istringstream提取水果和数量。

类似的东西:

std::string line;
while (std:::getline(readFile, line))
{
    std::istringstream iss(line);

    std::string fruit;
    if (std::getline(iss, fruit, ','))
    {
        // Have a fruit, get amount
        int amount;
        if (iss >> amount)
        {
            // Have both fruit and amount
        }
    }
}

答案 1 :(得分:0)

我首先要说的是,我只是像你这样的初学者,接受了你的代码并做了一些改动,例如:

  1. 使用“fstream”从文件中读取,直到不是文件的结尾。

  2. 然后将每一行读入字符串流中,以便稍后使用逗号分隔符对其进行制动。

  3. 我还使用了二维数组来存储水果和每种类型的数量。

  4. 最后我不得不在数组中搜索我想要展示的水果。

  5. 在我发布代码之前,我想警告你,如果有超过20个水果有多个属性(在这种情况下是数量),该程序将无法工作。 这是代码:

    #include <sstream>
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    void main  (void)
    {
        fstream readFile("fruit.txt");
        string fruit,amount,line;
        bool found = false;
        string fruitArray[20][2];
    
        cout << "Enter A fruit: ";
        cin >> fruit;
    
        while (!readFile.eof())
        {
            int y =0 ;
            int x =0 ;
            getline(readFile,line);
            stringstream ss(line);
            string tempFruit;
            while (getline(ss,tempFruit,','))
            {
                fruitArray[x][y] = tempFruit;
                y++;
            }
            x++;
        }
    
        for (int i = 0; i < 20; i++)
        {
            for (int ii = 0; ii < 2; ii++)
            {
                string test = fruitArray[i][ii] ;
                if  (test == fruit)
                { 
                    amount = fruitArray[i][ii+1];
                    found = true;
                    break;
                } 
                else{
                    cout <<"Searching" << '\n';
                } 
            }
            if (found){
                cout << "Found: " << fruit << ". Amount:" << amount << endl;
                break;
            }
        }
        cout << "Press any key to exit he program.";
        getchar();
    }
    

    希望你从中学到了一些东西(我确定)。