我们可以从反向 std::string 创建 std::istringstream 对象吗
Can we create std::istringstream object from a reversed std::string
我正在使用 recommended C++ books 学习 C++。特别是,我阅读了 std::istringstream
并看到了以下示例:
std::string s("some string");
std::istringstream ss(s);
std::string word;
while(ss >> word)
{
std::cout<<word <<" ";
}
实际输出
some string
期望输出
string some
我的问题是,我们如何使用反转字符串(包含所需输出中显示的相反顺序的单词)来创建上述 std::istringstream
对象 ss
?我查看了 std::istringstream's 构造函数,但找不到一个采用迭代器的构造函数,以便我可以传递 str.back()
和 str.begin()
而不是传递 std::string
.
如果使用临时字符串,可以将迭代器间接传递给 istringstream
构造函数:
#include <sstream>
#include <iostream>
int main()
{
std::string s{"Hello World\n"};
std::istringstream ss({s.rbegin(),s.rend()});
std::string word;
while(ss >> word)
{
std::cout<<word <<" ";
}
}
dlroW olleH
尽管那是反转字符串,而不是单词。如果您想以相反的顺序打印单词,单独使用 istringstream
并没有多大帮助。你可以使用一些容器来存储提取的单词,然后反向打印它们:
#include <sstream>
#include <iostream>
#include <vector>
int main()
{
std::string s{"Hello World\n"};
std::istringstream ss(s);
std::string word;
std::vector<std::string> words;
while(ss >> word)
{
words.push_back(word);
}
for (auto it = words.rbegin(); it != words.rend(); ++it) std::cout << *it << " ";
}
World Hello
自从您添加了 c++20
标签:
#include <sstream>
#include <string>
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> vec;
std::string s("some string");
std::string word;
std::istringstream ss(s);
while(ss >> word)
{
vec.push_back(word);
}
for (auto v : vec | std::views::reverse)
{
std::cout << v << ' ';
}
}
我正在使用 recommended C++ books 学习 C++。特别是,我阅读了 std::istringstream
并看到了以下示例:
std::string s("some string");
std::istringstream ss(s);
std::string word;
while(ss >> word)
{
std::cout<<word <<" ";
}
实际输出
some string
期望输出
string some
我的问题是,我们如何使用反转字符串(包含所需输出中显示的相反顺序的单词)来创建上述 std::istringstream
对象 ss
?我查看了 std::istringstream's 构造函数,但找不到一个采用迭代器的构造函数,以便我可以传递 str.back()
和 str.begin()
而不是传递 std::string
.
如果使用临时字符串,可以将迭代器间接传递给 istringstream
构造函数:
#include <sstream>
#include <iostream>
int main()
{
std::string s{"Hello World\n"};
std::istringstream ss({s.rbegin(),s.rend()});
std::string word;
while(ss >> word)
{
std::cout<<word <<" ";
}
}
dlroW olleH
尽管那是反转字符串,而不是单词。如果您想以相反的顺序打印单词,单独使用 istringstream
并没有多大帮助。你可以使用一些容器来存储提取的单词,然后反向打印它们:
#include <sstream>
#include <iostream>
#include <vector>
int main()
{
std::string s{"Hello World\n"};
std::istringstream ss(s);
std::string word;
std::vector<std::string> words;
while(ss >> word)
{
words.push_back(word);
}
for (auto it = words.rbegin(); it != words.rend(); ++it) std::cout << *it << " ";
}
World Hello
自从您添加了 c++20
标签:
#include <sstream>
#include <string>
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> vec;
std::string s("some string");
std::string word;
std::istringstream ss(s);
while(ss >> word)
{
vec.push_back(word);
}
for (auto v : vec | std::views::reverse)
{
std::cout << v << ' ';
}
}