【问题标题】:Learn CPP: Split string and manipulation? [duplicate]学习 CPP:拆分字符串和操作? [复制]
【发布时间】:2011-10-22 23:24:42
【问题描述】:

可能重复:
Remove spaces from std::string in C++

我开始学习cpp。希望你们能帮助我。现在,我遇到了字符串问题。我从用户那里得到输入,并想忽略空格并组合字符串。这里是:

getline(cin, userInput);

如果用户输入是:你好,我的名字是

我想合并到:Hellomynameis

有没有快速的方法来做到这一点。您的帮助将不胜感激。谢谢。

编辑:

另外,如果用户输入的是:keyword -a argument1 argument2 argument3

如何分隔单词,因为我想检查“关键字”、“选项”和参数是什么。

【问题讨论】:

标签: c++ string


【解决方案1】:

你可以使用:

remove_if(str.begin(), str.end(), ::isspace); 

算法只改变值而不是容器包含的值,所以在调用remove_if之后需要调用string::erase来实际修改容器的长度。

str.erase(remove_if(str.begin(), str.end(), isspace), str.end()); 

或者如果你是Boost粉丝,你可以简单使用:

erase_all(str, " "); 

【讨论】:

  • 谢谢大家。哦,我的..那太快了!!几秒钟前刚刚发布了这个问题。你能看看我编辑的问题吗?
  • 您还需要erasestd::remove_if 不会从字符串中删除任何内容。
  • @Nicol Bolas:在编辑中发现了我。检查更新。
  • @Nicol:你能发布示例代码吗?
  • @georgie:查看更新后的答案。
【解决方案2】:

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

istringstream iss(userInput)
iss >> blah1 >> blah2 ...

blah1 可以是任何类型。例如,如果 blah1 是浮点数,那么 iss >> blah1 将尝试将单词转换为浮点数(如 C 函数 atof)。

如果你想做参数解析,getopt 库可能就是你要找的。这是驱动大多数 gnu 命令行实用程序(如 ls)的参数解析的原因

【讨论】:

  • 嗨@Foo。嗯...“iss >> blah1 >> blah2”,表示用户输入了 2 个字符串,以空格分隔?如何确定用户输入的参数数量?我正在考虑做一些验证,比如如果用户输入超过 5 个参数,那么我会提示错误消息
【解决方案3】:

为了摆脱空间,@Als 的建议是正确的。

用于解析命令行参数: 您可能可以使用一个库,即

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

或getopt

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多