2012-05-01 5 views
5

Tôi có một chuỗi như thế này:Loại bỏ tất cả mọi thứ sau khi nhân vật (và cũng có thể ký tự)

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

tôi cần để có được chỉ "" xjdfhfakdjs", nhưng chuỗi là năng động, không hardcoded vì vậy tôi không biết những gì là nó, chiều dài vv để tôi muốn loại bỏ tất cả mọi thứ sau%, và cũng là% char

làm thế nào tôi có thể làm điều này

+3

Bạn đã thử mọi thứ chưa? Nó thường là một câu hỏi tốt hơn (và cho thấy một nỗ lực đức tin tốt về phía bạn) nếu bạn có thể nói, "Đây là những gì tôi đã cố gắng". –

Trả lời

1

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

Tôi tin rằng điều đó sẽ hiệu quả.

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

Xem:.? http://www.cplusplus.com/reference/string/string/find/ một nd http://www.cplusplus.com/reference/string/string/substr/ để biết thêm chi tiết

+0

@chris: Không phải vậy. Anh ấy làm một bản sao, của bạn thì không. –

+0

Chỉ phụ thuộc vào việc bạn muốn có một chuỗi mới hay không (tức là, nếu bạn vẫn muốn có quyền truy cập vào chuỗi gốc). Nếu không, thì câu trả lời của chris là tốt. –

+0

Tôi thấy điều này ít phức tạp hơn khi sử dụng. Thời gian để sao chép có lẽ không phải là rất quan trọng (ít nhất là OP đã không đề cập đến bất cứ điều gì). – chris

0

Đã làm một điều C-like mà không làm việc trong hình thức hiện tại của nó, nhưng chắc chắn còn phải nhàm chán hơn so với phương pháp trình bày ở trên:

#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); 
    } 
} 

có thể dễ dàng sửa đổi để làm việc cho các chuỗi động.