2012-05-01 17 views
5

mam ciąg jak poniżej:Usuwanie wszystko po znaku (a także znaków)

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

muszę się tylko „” xjdfhfakdjs”, ale ciąg jest dynamiczny, a nie sztywno, więc nie wiem, co jest to, długość itd. więc chciałem usunąć wszystko po%, a także% char

Jak mogę to zrobić

+3

Podałeś coś jeszcze spróbować? Zasadniczo jest to lepsze pytanie (i pokazuje wysiłek w dobrej wierze z twojej strony), jeśli możesz powiedzieć: "Oto, co próbowałem". –

Odpowiedz

1

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

Wierzę, że to zadziała.

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

Zob.? http://www.cplusplus.com/reference/string/string/find/ nd http://www.cplusplus.com/reference/string/string/substr/, aby uzyskać więcej informacji:

+0

@chris: Nie, nie jest. Jego robi kopię, twoja nie. –

+0

Tylko zależy od tego, czy chcesz nowy ciąg, czy nie (np. Jeśli chcesz nadal mieć dostęp do oryginalnego ciągu znaków). Jeśli nie, odpowiedź Chrisa jest dobra. –

+0

Uważam, że jest to mniej kłopotliwe w użyciu. Czas potrzebny do skopiowania prawdopodobnie nie jest bardzo ważny (przynajmniej OP nic nie wspominał). – chris

0

zostawił C-jak rzecz, która działa w obecnej formie, ale na pewno bardziej niż niezgrabne sposobami przedstawionymi powyżej:

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

mogą być łatwo modyfikowane, aby pracować dla dynamicznych ciągów.

Powiązane problemy