考虑引号之间的争论

putting into consideration the argument between quotation marks

本文关键字:之间      更新时间:2023-10-16

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

目前尚不清楚您要做什么。这是一个起点(运行它):

#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