0

私はテキストファイルを読み込もうとしていて、果物を私がタイプしたものと一致させようとしています(たとえば、リンゴと入力すると、テキストファイルでリンゴという単語が検索され、一致して見つかったことが出力されます)が、結果を達成するのに苦労しています欲しかったので、助けが必要です。

以下に示す内容のテキスト ファイル (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;
       }
}

アドバイスしてくださいありがとう。

4

2 に答える 2

0

私はあなたのような初心者であり、あなたのコードを取り、いくつかの変更を加えたと言うことから始めます。

  1. 「fstream」を使用して、ファイルの終わりでなくなるまでファイルから読み取りました。

  2. 次に、各行を文字列ストリームに読み込んで、後でコンマ区切り記号を使用してブレーキをかけることができるようにします。

  3. また、2 次元配列を使用して、果物と各種類の量を格納しました。

  4. 最後に、表示したい果物を配列から検索する必要がありました。

コードを投稿する前に、複数のプロパティ (この場合は金額) を持つ果物が 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();
}

あなたがそれから何かを学んだことを願っています(私は確かに学びました).

于 2013-10-08T15:21:27.753 に答える
0

ループでは、最初のループに読み込みgetline、2 回目に読み込みます。"apple"line"30\nbanana"line

代わりに ( を使用してgetline) 行全体を読み取り、次に eg を使用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
        }
    }
}
于 2013-10-08T10:06:02.810 に答える