在字符(以及字符)之后删除所有内容
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);
可以轻松修改以适用于动态字符串。
【讨论】:
以上是关于在字符(以及字符)之后删除所有内容的主要内容,如果未能解决你的问题,请参考以下文章