循环访问字符串 C++ 中的行
iterate through lines in a string c++
这是我需要做的。 我在C++有一个字符串。 对于字符串中的每一行,我需要在行首附加几个字符(如">>")。 我正在努力解决的是一种将字符串拆分为换行符的好方法,遍历附加字符的元素,然后将字符串重新连接在一起。 我已经看到了一些想法,例如strtok()
,但我希望c ++字符串会有一些更优雅的东西。
这是一个直接的解决方案。也许不是最有效的,但除非这是热代码或字符串很大,否则它应该做得很好。我们假设您的输入字符串称为 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"
一种更实用的方法是使用基于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
插入。
如果字符串中的数据基本上类似于文件,请尝试使用 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();
您可以将其包装在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;
}
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- C++:无法访问声明的受保护成员
- 通过指向指针数组的指针访问子类的属性
- 如何使用单独文件中的派生类访问友元函数对象