13

これが私がしなければならないことです。私はC++で文字列を持っています。文字列のすべての行について、行頭にいくつかの文字 (">> " など) を追加する必要があります。私が苦労しているのは、文字列を改行で分割し、文字を追加する要素を反復処理してから、文字列を再度結合する良い方法です。などのいくつかのアイデアを見てきましたが、strtok()C++ 文字列がもう少しエレガントなものになることを望んでいました。

4

4 に答える 4

24

これが簡単な解決策です。おそらく最も効率的ではないかもしれませんが、これがホットコードであるか文字列が巨大でない限り、うまくいくはずです。入力文字列が次のように呼ばれているとしますinput

#include <string>
#include <sstream>

std::string result;

std::istringstream iss(input);

for (std::string line; std::getline(iss, line); )
{
    result += ">> " + line + "\n";
}

// now use "result"
于 2012-09-20T14:19:21.677 に答える
5

より機能的なアプローチは、この回答getlineに示されているようにベースのイテレータを使用し、それを次のようにすべての入力行を変換するために使用することです。std::transform

std::string transmogrify( const std::string &s ) {
    struct Local {
        static std::string indentLine( const std::string &s ) {
            return ">> " + s;
        }
    };

    std::istringstream input( s );
    std::ostringstream output;
    std::transform( std::istream_iterator<line>( input ), 
                    std::istream_iterator<line>(),
                    std::ostream_iterator<std::string>( output, "\n" ),
                    Local::indentLine );
    return output.str();
}

ヘルパーはindentLine実際に行をインデントし、. によって改行が挿入されますostream_iterator

于 2012-09-20T14:33:59.400 に答える
3

文字列内のデータが基本的にファイルのようなものである場合は、std::stringstream.

std::istringstream lines( string_of_lines );
std::ostringstream indented_lines;
std::string one_line;
while ( getline( lines, one_line ) ) {
    indented_lines << ">> " << one_line << '\n';
}
std::cout << indented_lines.str();
于 2012-09-20T14:16:26.387 に答える
1

でラップして、一度に 1 行ずつ抽出するためにstringstream使用できます。std::getline

std::string transmogrify(std::string const & in) {
    std::istringstream ss(in);
    std::string line, out;
    while (getline(ss, line)) {
        out += ">> ";
        out += line;
        out += '\n';
    }
    return out;
}
于 2012-09-20T14:22:35.470 に答える