【问题标题】:How come my string function does not return anything?为什么我的字符串函数不返回任何内容?
【发布时间】:2019-10-12 13:54:17
【问题描述】:

函数要么不返回任何内容,要么返回一个空字符串。我试图在字符串中的 -e 文本之后擦除下一个序列之前的所有内容。例如,test -e test/file/path 应该返回 test/file/path-e 后面没有空格。但是,当函数不返回任何内容或返回空字符串时。我找不到我的功能有什么问题,请帮忙!

#include <iostream>
using namespace std;

string fileparse(string str) {
    int i;

    for (i = 0; i < str.size(); i++)
        if (str[i] == '-')
            i += 2; //to account for the space after 'e'
    str.erase(str.begin(), str.begin()+i);
    return str;
}

int main()
{

    string str = "test -e test/file/path";
    string vars = fileparse(str);
    cout << vars << endl; //blank
    return 0;
}

【问题讨论】:

  • 你的for循环完成后i的值是多少?
  • 循环结束后,i是字符串的长度。它会擦除整个字符串。
  • i += 2之后你必须break
  • 谢谢,我不敢相信我没有意识到...

标签: c++ string function parsing


【解决方案1】:
if (str[i] == '-') {
     i += 3;
     break;
}

遇到'-' 符号时停止。去掉i增加1,去掉字母e加一个空格2

【讨论】:

  • 是的,这很好。中断离开了 for,但 if 的括号范围是你真正缺少的,因为没有它就无法工作,或者不是我糟糕的 c++ 方式。
【解决方案2】:

你必须跳出 for 循环,因为你让它完成并且 'i' 一直在增加。然后,当您引用 'i' 时,它将删除整个字符串。

【讨论】:

    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 2021-04-14
    • 2012-03-17
    • 1970-01-01
    • 2022-01-04
    • 2022-01-17
    • 2016-02-13
    • 2020-04-15
    相关资源
    最近更新 更多