这就是我需要做的。我在 C++ 中有一个字符串。对于字符串中的每一行,我需要在行首附加几个字符(如“>>”)。我正在努力解决的问题是将字符串拆分为换行符,遍历附加字符的元素,然后将字符串重新连接在一起。我已经看到了一些想法,例如strtok()
,但我希望 c++ 字符串会有一些更优雅的东西。
问问题
13600 次
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
-based 迭代器,如this answer所示,然后使用 withstd::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
您可以将其包装在 a 中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 回答