2017-10-10 38 views
0

我想解析一個命令行字符串,在每個空白處考慮字符串之間有引號之間的單詞。我想將2個引號之間的任何內容存儲爲向量中的1個索引。考慮引號之間的爭論

vector<string> words; 
stringstream ss(userInput); 
string currentWord; 
vector<string> startWith; 
stringstream sw(userInput); 

while (getline(sw, currentWord, ' ')) 
    words.push_back(currentWord); 

while (getline(ss, currentWord, '"')) 
startWith.push_back(currentWord); //if(currentWord.compare("")){ continue;} 

for (int i = 0; i < startWith.size(); i++) 
    curr 
    if(currentWord.compare("")){ continue;} 
    cout << " Index "<< i << ": " << startWith[i] << "\n"; 
+0

[性病::引用(http://en.cppreference.com/w/cpp/io/manip /引用) – ZDF

+0

@ZDF從C++ 14開始,這在C++ 11中不可用。 – Murphy

+0

@Murphy正確。 – ZDF

回答

0

目前尚不清楚您要做什麼。這裏有一個起點(run it):

#include <iostream> 
#include <sstream> 
#include <string> 

std::istream& get_word_or_quote(std::istream& is, std::string& s) 
{ 
    char c; 

    // skip ws and get the first character 
    if (!std::ws(is) || !is.get(c)) 
    return is; 

    // if it is a word 
    if (c != '"') 
    { 
    is.putback(c); 
    return is >> s; 
    } 

    // if it is a quote (no escape sequence) 
    std::string q; 
    while (is.get(c) && c != '"') 
    q += c; 
    if (c != '"') 
    throw "closing quote expected"; 

    // 
    s = std::move(q); 
    return is; 
} 

int main() 
{ 
    std::istringstream is {"not-quoted \"quoted\" \"quoted with spaces\" \"no closing quote!" }; 

    try 
    { 
    std::string word; 
    while (get_word_or_quote(is, word)) 
     std::cout << word << std::endl; 
    } 
    catch (const char* e) 
    { 
    std::cout << "ERROR: " << e; 
    } 

    return 0; 
} 

預期輸出是:

not-quoted 
quoted 
quoted with spaces 
ERROR: closing quote expected