C++ 学习CPP:分割字符串和操作?

C++ 学习CPP:分割字符串和操作?,c++,string,C++,String,可能重复: 我开始学习cpp。希望你们能帮助我。现在,我对字符串有一个问题。我从用户那里得到输入,希望忽略空白并合并字符串。这是: getline(cin, userInput); 如果用户输入为:你好,我的名字是 我想组合成:Hellomynameis 有没有一个快速的方法可以做到这一点。非常感谢你的帮助。谢谢 编辑: 对于另一种情况,如果用户输入为:关键字-a argument1 argument2 argument3 我要检查什么是“关键字”、“选项”和参数,因此如何区分这些单词 您可

可能重复:

我开始学习cpp。希望你们能帮助我。现在,我对字符串有一个问题。我从用户那里得到输入,希望忽略空白并合并字符串。这是:

getline(cin, userInput);
如果用户输入为:你好,我的名字是

我想组合成:Hellomynameis

有没有一个快速的方法可以做到这一点。非常感谢你的帮助。谢谢

编辑:

对于另一种情况,如果用户输入为:关键字-a argument1 argument2 argument3

我要检查什么是“关键字”、“选项”和参数,因此如何区分这些单词

您可以使用:

remove_if(str.begin(), str.end(), ::isspace); 
该算法只更改值,而不更改容器中包含的值,因此您需要调用
string::erase
,以便在调用
remove\u if
后实际修改容器的长度

str.erase(remove_if(str.begin(), str.end(), isspace), str.end()); 
或者,如果您是粉丝,您可以简单地使用:

erase_all(str, " "); 
您可以使用:

remove_if(str.begin(), str.end(), ::isspace); 
该算法只更改值,而不更改容器中包含的值,因此您需要调用
string::erase
,以便在调用
remove\u if
后实际修改容器的长度

str.erase(remove_if(str.begin(), str.end(), isspace), str.end()); 
或者,如果您是粉丝,您可以简单地使用:

erase_all(str, " "); 

如果只想分隔单词,请使用istringstream:

istringstream iss(userInput)
iss >> blah1 >> blah2 ...
blah1可以是任何类型。例如,如果blah1是一个float,那么iss>>blah1将尝试将单词转换为float(如C函数atof)


若您想进行参数解析,则可能需要getopt库。它是驱动大多数gnu命令行实用程序(如ls)的参数解析的原因。

如果您只想分隔单词,请使用istringstream:

istringstream iss(userInput)
iss >> blah1 >> blah2 ...
blah1可以是任何类型。例如,如果blah1是一个float,那么iss>>blah1将尝试将单词转换为float(如C函数atof)


若您想进行参数解析,则可能需要getopt库。它是大多数gnu命令行实用程序(如ls)的参数解析的驱动力。

以摆脱@Als建议的正确空间

要分析命令行参数,请执行以下操作: 你可以使用图书馆,例如

boost::程序选项(http://www.boost.org/doc/libs/1_47_0/doc/html/program_options.html),

或getopt


或利巴格(http://bisqwit.iki.fi/source/libargh.html)为了摆脱空间,@Als建议的是正确的

要分析命令行参数,请执行以下操作: 你可以使用图书馆,例如

boost::程序选项(http://www.boost.org/doc/libs/1_47_0/doc/html/program_options.html),

或getopt


或利巴格(http://bisqwit.iki.fi/source/libargh.html)

谢谢。哦,天哪。。太快了!!几秒钟前刚刚发布了这个问题。你能看看我编辑的问题吗?你还需要删除
std::remove_if
不删除字符串中的任何内容。@Nicol Bolas:发现我正在编辑。检查更新。@Nicol:你能发布示例代码吗?@georgie:查看更新的答案。谢谢。哦,天哪。。太快了!!几秒钟前刚刚发布了这个问题。你能看看我编辑的问题吗?你还需要删除
std::remove_if
不从字符串中删除任何内容。@Nicol Bolas:发现我在编辑。检查更新。@Nicol:你能发布示例代码吗?@georgie:查看更新的答案。你好@Foo。隐马尔可夫模型。。。“iss>>blah1>>blah2”表示用户输入的两个字符串之间用空格隔开?如何确定用户输入的参数数量?我正在考虑做一些验证,比如如果用户输入超过5个参数,那么我将提示错误消息hi@Foo。隐马尔可夫模型。。。“iss>>blah1>>blah2”表示用户输入的两个字符串之间用空格隔开?如何确定用户输入的参数数量?我正在考虑做一些验证,比如如果用户输入的参数超过5个,那么我将提示错误消息“whitespace”!=“空间”。但是[最上面的答案]()确实回答了这个问题。“空白”!=“空间”。但是[最上面的答案]()确实回答了这个问题。