1

私はまだ学習中であり、私のコードは見栄えが悪いと思う人もいるかもしれませんが、これで終わりです。

example.txt という名前のテキスト ファイルがあります。

example.txt の行は次のようになります。

randomstuffhereitem=1234randomstuffhere

プログラムに item= の横にある数字を取り込ませたいので、次のコードを使用して少し始めました。

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

    string word;

int main()
{
    ifstream readFile("example.txt", ios::app);
    ofstream outfile("Found_Words.txt", ios::app);
    bool found = false; 

    long int price;
    cout << "Insert a number" << endl;
    cout << "number:";
    cin >> number;
    system("cls");
    outfile << "Here I start:";
    while( readFile >> word )
    {
        if(word == "item=")

ここに問題があります。まず、「item=」のみを検索しますが、それを見つけるために、他の文字と一緒に含めることはできません。それは独立した単語でなければなりません。

次のものは見つかりません。

helloitem=hello

次のものが見つかります。

hello item= hello

スペースで区切る必要があるのも問題です。

次に、item= の横にある数字を見つけたいと思います。item=1234 を見つけられるようにしたいと思いますが、1234 は 6723 のような任意の数字にできることに注意してください。

そして、数字の後に来るものを見つけたくないので、数字が止まると、それ以上データを取り込まなくなります。item=1234hello のように item=1234 でなければなりません

            {
            cout <<"The word has been found." << endl;
            outfile << word << "/" << number;
            //outfile.close();
                if(word == "item=")
                {
        outfile << ",";
                }

        found = true;
            }
    }
    outfile << "finishes here" ;
    outfile.close();
    if( found = false){
    cout <<"Not found" << endl;
    }
    system ("pause");
}
4

1 に答える 1

0

次のようなコードを使用できます。

bool get_price(std::string s, std::string & rest, int & value)
{
    int pos = 0; //To track a position inside a string
    do //loop through "item" entries in the string
    {
        pos = s.find("item", pos); //Get an index in the string where "item" is found
        if (pos == s.npos) //No "item" in string
            break;
        pos += 4; //"item" length
        while (pos < s.length() && s[pos] == ' ') ++pos; //Skip spaces between "item" and "="
        if (pos < s.length() && s[pos] == '=') //Next char is "="
        {
            ++pos; //Move forward one char, the "="
            while (pos < s.length() && s[pos] == ' ') ++pos; //Skip spaces between "=" and digits
            const char * value_place = s.c_str() + pos; //The number
            if (*value_place < '0' || *value_place > '9') continue; //we have no number after =
            value = atoi(value_place); //Convert as much digits to a number as possible
            while (pos < s.length() && s[pos] >= '0' && s[pos] <= '9') ++pos; //skip number
            rest = s.substr(pos); //Return the remainder of the string
            return true; //The string matches 
        }
    } while (1);
    return false; //We did not find a match
}

ファイルから文字列を読み取る方法も変更する必要があることに注意してください。ここで述べたように、改行(std::getline)またはストリームの最後まで読み取ることができます:stackoverflow question

于 2013-03-10T19:22:42.523 に答える