【问题标题】:Unable to use string.substr(x, y) multiple times on the same string with c++?无法使用 c++ 在同一个字符串上多次使用 string.substr(x, y)?
【发布时间】:2018-03-21 08:04:44
【问题描述】:

我正在使用命令行界面。 用户输入诸如

之类的命令

这将添加带有-s 标志的“歌曲”

add -s TITLE ARTIST 

这将添加一个带有-a 标志的“专辑”

add -a TITLE ARTIST

还有不同的标志和不同的命令,例如 delete

我这样做是为了评估命令和标志,但是我在获取字符串的其余部分时遇到了麻烦。用户输入以 char 数组的形式接收,我将其转换为字符串。

  if (inputString.substr(0, 3) == "add"){
    if (inputString.substr(4, 5) == "-s"){
      cout << "TEST: ADD SONGS" << endl;
      //PROBLEM IS THIS LINE
      cout << inputString.substr(6, MAX_LENGTH) << endl;
    }

每当我得到命令 + 动作标志时,我想使用字符串的其余部分运行一个新函数,以将信息实际添加到数据库中。

当我输入add -s 时没有问题程序知道我想通过评估第一个字符来添加一首歌曲。但是,如果我输入更多诸如“add -s "Sorry" "Justin Bieber"”之类的内容,程序甚至不会承认 add -s 标志已运行。

有人可以解释为什么会这样以及我可以如何改变它吗?现在坚持了一段时间。

【问题讨论】:

标签: c++ string command substr


【解决方案1】:
if (inputString.substr(4, 5) == "-s"){

substr() 的第二个参数是字符数。这会从字符串中提取(最多)5 个字符,从偏移量 4 开始。

但是,如果我输入更多内容,例如“add -s “Sorry” “Justin

好的,所以用我的手指数数到偏移量 4,实际上就是“-”字符。然后,从该位置开始提取五个字符,得到以下字符串:

-s "S

我算作五个字符。这就是substr() 返回的内容。将其与字符串“-s”进行比较显然失败了。

您应该借此机会学习一些调试技能。您是否添加了这样的内容:

std::cout << inputString.substr(4, 5) << std::endl;

就在第二个 if 声明之前,我相信您自己会解决所有这些问题的。

【讨论】:

  • 谢谢,不知道为什么一直以为substr的第二个参数是第二个位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多