当我为第一个字符串(C++)输入空格时,如何删除输出中的双引号和逗号

How to remove double quotation marks and comma in the output when I input space for the first string (C++)

本文关键字:删除 输出 何删除 字符串 第一个 C++ 输入 空格      更新时间:2023-10-16

我正试图编写一个函数来拆分字符串并将其像子字符串一样返回。代码已完成。我刚刚遇到一个问题:当我为第一个字符串输入空格时,如何删除输出中的双引号和逗号?感谢您的帮助!非常感谢。

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <ctype.h>
using namespace std;
vector<string> split(string targer, string delimiter);
int main()
{
   string s, delimiter;
   vector<string> tokens;
   cout << "Enter string to split:" << endl;
   getline (cin,s);
   cout << "Enter delimiter string:" << endl;
   getline (cin,delimiter);
   tokens = split(s, delimiter);
   cout << "The substrings are: ";
   for(int i = 0; i < tokens.size() - 1; i++)
  {
    if (tokens[i].length() != 0){
    cout << """ << tokens[i] << """ << "," << " ";
    }
  }
  if (tokens.size() != 0)
  {
    cout << """ << tokens[tokens.size() - 1] << """;
  }
  cout<<endl;
  return 0;
}
vector<string> split(string target, string delimiter){
stringstream ss(target);
string item;
vector<string> tokens;
while (getline(ss, item, delimiter.at(0))) {
    tokens.push_back(item);
 }
return tokens;
}

您的问题不是"当我为第一个字符串输入空格时,如何在输出中删除双引号和逗号"。

您的问题是正确地拆分字符串,以便将包含空格的带引号字符串正确地提取为单个字符串。

I/O库提供的解析输入直到下一个定界字符的简单方法不足以单独处理字符串的拆分。他们对引号一无所知。你必须自己做这项工作:

  1. 使用以下逻辑,一次扫描一个输入字符串。

  2. 如果当前字符是分隔字符,请继续到下一个字符。

  3. 如果当前字符是引号,则继续扫描,直到看到下一个引号字符,然后将引号之间的所有内容提取为一个单词。

  4. 否则,继续扫描,直到看到下一个分隔字符,然后提取所有内容,直到该点成为一个单词。

这是典型分裂算法的基本高级概述。你最终会得到单独提取的单词,并将引用的内容作为一个单词。您可以采用这个高级概述,并将其重写为较低级别、更详细的算法,然后向您的橡皮鸭解释它。在你的橡皮鸭同意你的详细算法可以工作后,你可以直接将其翻译成代码。

一旦你正确地实现了这一点,你就可以进一步完善它,允许引号字符本身包含在一个被引用的单词中。通常,这是通过在一行中使用两个连续的引号或反斜杠"转义"字符来完成的。