删除角色(以及角色)之后的所有内容

问题描述 投票:0回答:5

我有一个这样的字符串:

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

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

我该怎么办?

c++ string visual-c++ std
5个回答
24
投票
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/ 了解更多详细信息


8
投票

我相信这会起作用。

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

0
投票

做了一个类似 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);
    }
}

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


0
投票

或者。

#include <iostream>

int main()
{
    std::string string1 = "xjdfhfakdjs%54k34k.-jk34";

    char findit = string1.find_first_of("%");

    for (int i = findit; i < string1.size(); i++) {
        string1.erase(i);
    }

    std::cout << string1;

}

这将从字符串的开头找到第一个实例,然后 .erase 将删除“findit”以及之后的所有内容,直到 .size() 耗尽。


-1
投票
string1.erase (string1.find ("%"), string1 [string1.length() - 1]);

这应该可行。

© www.soinside.com 2019 - 2024. All rights reserved.