无法在与c ++相同的字符串上多次使用string.substr(x,y)?

时间:2017-10-10 02:38:06

标签: c++ string command substr

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

之类的命令

这将添加带有-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"程序甚至不承认添加了-s标志。

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

1 个答案:

答案 0 :(得分:1)

if (inputString.substr(4, 5) == "-s"){

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

  

但是,如果我输入更多内容,例如&#34;添加-s&#34;抱歉&#34; &#34;贾斯汀

好的,所以用我的手指计算抵消4,实际上,&#39; - &#39;字符。然后,从该位置开始提取五个字符到达以下字符串:

-s "S

我算作五个字符。这是substr()返回的内容。比较这与字符串&#34; -s&#34;显然失败了。

您应该将此作为学习一些调试技巧的便利机会。如果你添加了这样的东西:

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

在第二次if声明之前,我确信你会自己想出这一切。