0

stringオブジェクトに保存されているテキストファイルを解析する方法を見つけようとしても無駄です。文字列の形式は次のとおりです。

...
1  45
1  46
1  47
2  43
2  44
2  45
...

文字列全体を反復処理し、各行を取得してから、文字列を最初の整数と2番目の整数で分割してさらに処理しようとしています。ただし、次のようなことは機能しません。

string  fileContents;

string::iterator index;

for(index = fileContents.begin(); index != fileContents.end(); ++index)
{
   cout << (*index);       // this works as expected

   // grab a substring representing one line of the file
   string temp = (*index); // error: trying to assign const char to const char*
}

私はこれを行う方法を見つけようとしていますが、これまでのところ運がありません。

4

2 に答える 2

4

istringstreamsを使用std::getline()して、各行から整数を取得します。

#include <iostream>
#include <sstream>
#include <string>

int main()
{
    std::istringstream in("1 45\n1 47\n");
    std::string line;
    while (std::getline(in, line))
    {
        std::istringstream nums(line);
        int i1, i2;
        if (nums >> i1 && nums >> i2)
        {
            std::cout << i1 << ", " << i2 << "\n";
        }
    }
    return 0;
}

http://ideone.com/mFmynjのデモを参照してください。

于 2012-11-16T22:04:22.910 に答える
0

Astd::string::iteratorはを識別しcharます。Acharを使用して1つの要素を形成することもできますstd::stringが、これはおそらくあなたが望むものではありません。代わりに、2つのイテレータを使用してstd::string、を作成できます。例:

for (std::string::const_iterator begin(s.begin()), it(begin), end(s.end());
     end != (it = std::find(it, end, '\n'); begin = ++it) {
    std::string line(begin, it);
    // do something with the line
}

std::string指摘されたように、あなたから作成されたストリームでストリーム機能を使用する方が簡単な場合があります。

于 2012-11-16T22:24:57.277 に答える