我正在尝试迭代字符串的单词.
可以假设该字符串由用空格分隔的单词组成.
请注意,我对C字符串函数或那种字符操作/访问不感兴趣.另外,请在答案中优先考虑优雅而不是效率.
我现在最好的解决方案是:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string s = "Somewhere down the road";
istringstream iss(s);
do
{
string subs;
iss >> subs;
cout << "Substring: " << subs << endl;
} while (iss);
}
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来做到这一点?
我知道如何将完整的字符串转换为整数(使用std::stoi)。但是你能指导我如何从字符串中提取整数吗?例如,我想15从 string 中提取整数a15a。
string x="a15a";
int a = std::stoi(x);
Run Code Online (Sandbox Code Playgroud)
如果整数位于字符串的开头,则上述方法可以正常工作。例如,如果 的值为string x,"15a"则将其转换为整数15。但如果整数出现在字符串中间的某个位置,它就不起作用。如何从字符串之间提取整数。谢谢。
这个界面后面的东西:
class StreamTokenizer
{
public:
StreamTokenizer(const std::string delimiter);
std::list<std::string> add_data(const std::string);
std::string get_left_over();
};
StreamTokenizer d(" ");
std::list<std::string> tokens;
tokens.append(d.add_data("tok"));
tokens.append(d.add_data("1 t"));
tokens.append(d.add_data("ok2 tok3"));
tokens.push_back(d.get_left_over());
// tokens = {tok1, tok2, tok3}
// d = {}
Run Code Online (Sandbox Code Playgroud)
它以块的形式接收数据,它应该返回它到目前为止找到的所有标记,它应该能够将剩余部分连接到下一个块,并且它不应该保存已经被标记化的数据.
请不要建议使用stringstream,除非你可以展示如何从中删除已经标记化的数据(我的流几乎是无限的)