有没有一种简单的方法可以将由空格字符分隔的一行输入拆分为 C++ 中的整数?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以将由空格字符分隔的一行输入拆分为 C++ 中的整数?【英文标题】:Is there a simple way for splitting one line of input separated by a space character into integers in C++? 【发布时间】:2020-09-17 04:53:36 【问题描述】:我是一名 C++ 初学者,我一直在从事一个项目,在该项目中您必须输入一些用空格分隔的整数,并且程序必须输出整数的所有可能排列。我知道在 python 中,这可以使用[int(item) for item in input().split()]
来完成,但我不知道如何在 C++ 中做同样的事情。我想使用 C++ 中内置的简单方法。任何人都可以提供一些意见吗?任何帮助将不胜感激。
【问题讨论】:
一个输入流和>>
操作符将使这个问题的读取部分的工作非常短。请查阅您的 C++ 编程文本。它应该在前几章中介绍。
“所有可能的整数排列”是什么意思?你能至少展示一些输入/输出的例子吗?
我的建议:逐行阅读输入。使用std::istringstream
从每一行读取int
s。
The Definitive C++ Book Guide and List。你不想在没有一套好的参考资料的情况下学习 C++,因为你的进度太慢了。如果对基础知识没有很好的理解,您将无法理解 Stack Overflow 上的许多答案,并且您将成为互联网上那些糟糕的教程的牺牲品。 C++ 是一种非常复杂的语言,是专业程序员经常使用的最复杂的语言之一,并且对于粗心的人来说充满了陷阱。
终于得到所有排列请了解std::next_permutation
。
【参考方案1】:
你看,你从字符串创建一个整数向量,然后简单地置换向量:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
int main()
std::string str;
std::getline(std::cin, str);
std::istringstream iss(str);
std::vector<int> vec;
int temp = 0;
while (iss >> temp)
vec.push_back(temp);
//you now have a vector of integers
std::sort(vec.begin(), vec.end()); //this is a must as `std::permutations()` stops when the container is lexicographically sorted
do
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>std::cout, " ");
std::cout << "\n";
while (std::next_permutation(vec.begin(), vec.end()));
return 0;
要了解如何输出所有可能长度的所有排列,请查看How to create a permutation in c++ using STL for number of places lower than the total length
【讨论】:
评论不用于扩展讨论;这个对话是moved to chat。以上是关于有没有一种简单的方法可以将由空格字符分隔的一行输入拆分为 C++ 中的整数?的主要内容,如果未能解决你的问题,请参考以下文章