2017-08-03 83 views
0

我有一個關於C++中的字符串的問題。假設我有一個unicode字符串象下面這樣:C++複製字符串的指定索引之間的任何子字符串

std::wstring S = L"NAME: STUPID"; 

而且上面的字符串可以像L"AGE: STUPID"L"BEHAVIOR: STUPID"L"BEHAVIOR: STUPID; NAME: ANONYMOUS"

我想從像上面字符串中提取字STUPID。複製應從給定字的長度開始(例如,長度爲NAMEBEHAVIOR),並停在第一個找到的分號(;)處。複製應該從主字符串中完成。 (例如L"NAME: STUPID")。

我曾嘗試:

LPCWSTR ExtractSubStringFromString(LPCWSTR & Type, LPCWSTR & String) { 

    std::wstring S = std::wstring(String); 

    if (S.find(L";") != std::wstring::npos) // MAIN STRING CONTAINS A SEMICOLON 
    { 
     std::wstring S = std::wstring(String + std::wstring(Type).length(), // << CANNOT THINK HOW TO COPY SUBSTRING HERE. 
    } 
    else { NO SEMICOLON, ONLY CAN BE A ONE WORD } 
} 
+0

找到冒號'':',跳過所有可能的空格,並且您有起始位置。 –

+0

@Someprogrammerdude我無法弄清楚如何去做。 :-( – Blueeyes789

+1

看看['std :: wstring'](http://en.cppreference.com/w/cpp/string/basic_string)你可以使用'size()'來獲取內容的長度,'' ()'或'operator []()'來訪問單個字符。所以缺少什麼? – Scheff

回答

2

我認爲你正在尋找std::wstringsubstr方法。這是你想達到什麼樣的工作例如:

std::wstring ExtractSubStringFromString(const std::wstring String) 
{ 
    std::wstring S = std::wstring(String); 

    size_t semicolon = S.find(L';'); 

    // semicolon found? 
    if (semicolon != std::wstring::npos) 
    { 
     // find colon between string start and semicolon 
     size_t colon = S.find(L':', 0); 

     if (colon != std::wstring::npos && colon < semicolon) 
     { 
      // take string after colon to the semicolon 
      return S.substr(colon + 1, semicolon - colon - 1); 
     } 

     // invalid input parameter 
     return L""; 
    } 

    size_t colon = S.find(L':'); 

    if (colon != std::wstring::npos) 
    { 
     size_t count = std::wstring::npos; 

     if (S[S.length() - 1] == L']') 
      count = S.length() - 1 - colon - 1; 

     // return substring after colon to the end 
     return S.substr(colon + 1, count); 
    } 


    // invalid input parameter 
    return L""; 
} 

返回STUPID對投入<anything>: STUPID[<anything>: STUPID]<anything>: STUPID; <anything>: <anything>...

你可能想利用空白的照顧。

+0

謝謝!它工作正常!但是我怎麼能改變這個返回'STUPID'當我輸入'[:STUPID] ?我忘了在我的問題中提到它,在這種情況下,它現在返回'STUPID]',我嘗試了很多次,仍然遇到'STUPID]',在這樣的字符串操作中我很弱。:-( – Blueeyes789

+0

@ Blueeyes789如果存在''''''''' – vasek

+0

我也想過,但我更願意直接從這個函數返回沒有它的字符串。 – Blueeyes789

相關問題