当前位置: 首页 > 知识库问答 >
问题:

无法修复C++中解析输入的代码中的bug

滕祯
2023-03-14

我正在编写代码来解析C++中的输入,但是无法修复这个错误。请帮助我调试它并解释代码,因为我是从某个地方复制的,不知道它遵循的逻辑。

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
    string line = "GeeksForGeeks is a must try";
    // Vector of string to save tokens
    vector <string> tokens;
    // stringstream class check1
    stringstream check1(line);
    string intermediate;
    // Tokenizing w.r.t. space ' '
    while(getline(check1, intermediate, ' '))
    {
        tokens.push_back(intermediate);
    }
    // Printing the token vector
    for(int i = 0; i < tokens.size(); i++)
        cout << tokens[i] << '\n';
}

共有1个答案

仲孙经赋
2023-03-14

最大的问题是缺少提供StringStream的#include 。之后,还有一个关于for循环的警告。它警告不要使用不同的整数类型进行比较。int是带符号的,这意味着它是否定的。tokens.size()返回一个size_t,它是无符号的。整数行为可能会创建一些难以跟踪的bug,因此最好在可能的情况下避免混合使用有符号和无符号。如果您至少使用-wall-wextra进行编译,您还会看到该警告。使用基于范围的for很容易克服该警告。

使用namespace std;被认为是错误的做法。

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

int main() {
  std::string line = "GeeksForGeeks is a must try";
  // Vector of string to save tokens
  std::vector<std::string> tokens;
  std::stringstream check1(line);
  std::string intermediate;

  // Tokenizing w.r.t. space ' '
  while (std::getline(check1, intermediate, ' ')) {
    tokens.push_back(intermediate);
  }
  // Printing the token vector
  for (auto i : tokens) {
    std::cout << i << '\n';
  }
}

这段代码工作的主要原因是std::StringStream。流自然在空格上中断。因此,当我们向std::StringStream提供对象line时,它能够自动解析单词。这些字被放入std::vector令牌中。std::vector是分配在堆上的数组,可以在需要时增长。

就学习C++而言,互联网实际上并不是一个很好的资源,就像这个不完整的例子所展示的那样。我建议你买一本好书。

 类似资料:
  • 问题内容: 我正在使用以下设置 MacOS Mojave Python 3.7.1 Visual Studio Code 1.30 Pylint 2.2.2 Django 2.1.4 我想使用衬棉使我的生活在Visual Studio代码中更轻松一些,但是,每次导入我都声明“未解决的导入”。即使是默认的django导入(即从django.db导入模型)。 我认为这是因为它没有看到虚拟环境pytho

  • 本文向大家介绍C ++中的输入迭代器,包括了C ++中的输入迭代器的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的输入迭代器。 输入迭代器是STL中五个最弱,最简单的迭代器之一。它们主要用于串行输入操作,在该操作中,每个值都被读取为一个值,然后迭代器移至下一个值。 示例 输出结果

  • 我编写了以下代码: 我的终端支持Unicode,在Linux上使用gcc 8.2.1编译。

  • 我正在使用Eclipse版本:Oxygen.1a Release(4.7.1a)。我正在尝试创建一个Web服务应用程序。但是,当我尝试创建一个接口类与导入javax.jws.WebService;我得到错误作为导入javax.jws无法解决 我正在使用tomcat 8.5,并在java构建路径中添加了库。

  • 我这里有一段简单的代码: 我收到一个错误,上面写着: 文件 根据提供的解决方案,我尽了最大努力。有趣的是,我在另一个表上有另一个查询,效果很好。非常感谢您的帮助。提前谢谢。 这是表的架构: ;

  • 本文向大家介绍Pycharm代码无法复制,无法选中删除,无法编辑的解决方法,包括了Pycharm代码无法复制,无法选中删除,无法编辑的解决方法的使用技巧和注意事项,需要的朋友参考一下 菜单栏,tools--去掉勾选的Vim Emulator这个仿真插件就好了。 以上这篇Pycharm代码无法复制,无法选中删除,无法编辑的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支