考虑引号之间的争论

时间:2017-10-10 04:10:04

标签: c++ c++11

我正在尝试解析命令行字符串,在每个空格处考虑到字符串在引号之间有单词。我想将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";

1 个答案:

答案 0 :(得分:1)

目前尚不清楚你要做什么。这是一个起点(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