【问题标题】:Removing everything after character (and also character)在字符(以及字符)之后删除所有内容
【发布时间】:2012-05-01 01:11:29
【问题描述】:

我有一个这样的字符串:

std::string string1 = "xjdfhfakdjs%54k34k.-jk34";

我只需要得到“”xjdfhfakdjs”,但字符串是动态的,不是硬编码的,所以我不知道它是什么,长度等等,所以我想删除 % 之后的所有内容,还有 % 字符。

我该怎么做?

【问题讨论】:

  • 你有没有尝试过?如果您可以说“这就是我已经尝试过的”,通常是一个更好的问题(并且表明您的诚意)。

标签: c++ string visual-c++ std


【解决方案1】:
std::string the_prefix_you_want = string1.substr(0, string1.find("%"));

请参阅:http://www.cplusplus.com/reference/string/string/find/http://www.cplusplus.com/reference/string/string/substr/ 了解更多详情

【讨论】:

  • @chris:不,不是。他的复制品,你的没有。
  • 只取决于你是否想要一个新字符串(即,如果你仍然想访问原始字符串)。如果不是,那么克里斯的回答很好。
  • 我觉得使用起来不那么麻烦。复制所花费的时间可能不是很重要(至少 OP 没有提及任何内容)。
  • chris 的string1.erase (string1.find("%"), string1[string1.length() - 1]); 比性能更重要,给定一个空字符串1,索引string1[-1] 具有未定义的行为(可能会使应用程序崩溃)。 erase 的第二个参数实际上需要多个字符,npos 标记值指示字符串的其余部分,但无论如何这是默认值,所以它应该只是 string::size_type n = string1.find("%"); if (n != string::npos) string1.erase(n); Edward 的答案是安全的 - 如果 find 返回 @ 987654329@ substr 返回整个字符串。
【解决方案2】:

我相信这会奏效。

std::string mystr = string1.substr(0, string1.find("%", 0));

【讨论】:

    【解决方案3】:

    做了一个类似 C 的东西,它以当前的形式工作,但肯定比上面显示的方法更笨重:

    #include <windows.h>
    void main ()
    {
        int i;
        wchar_t searchString[100];
        wchar_t * stringReturn;
        memset(searchString, L'\0', sizeof(stringReturn));
        wcscpy_s(searchString, 100, L"String\\ to search");
        stringReturn = wcschr (searchString, '\\');
        if (stringReturn)
        {
            for (i = 0; i < (int)(stringReturn - searchString); i++) stringReturn[i] = searchString[i];
            stringReturn[i] = L'\0';
            wcscpy_s(searchString, 100, stringReturn);
        }
    }
    

    可以轻松修改以适用于动态字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      相关资源
      最近更新 更多