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”!=“空间”。但是[最上面的答案]()确实回答了这个问题。“空白”!=“空间”。但是[最上面的答案]()确实回答了这个问题。