在字符(以及字符)之后删除所有内容

Posted

技术标签:

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

我有一个这样的字符串:

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

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

我该怎么做?

【问题讨论】:

你有没有尝试过?如果您可以说“这就是我已经尝试过的”,通常是一个更好的问题(并且表明您的诚意)。 【参考方案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);
    

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

【讨论】:

以上是关于在字符(以及字符)之后删除所有内容的主要内容,如果未能解决你的问题,请参考以下文章

从特定字符开始删除所有文本

删除字符串的一部分之后的所有内容

vi / vim 删除以及其它命令

如何使用 JavaScript (html) 在某个字符出现之前/之后删除所有内容

VB.Net 删除第三个连字符后的所有内容

删除最后一个字母之后的所有字符