在Python中有类似于C ++中的split()吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中有类似于C ++中的split()吗?相关的知识,希望对你有一定的参考价值。

我是竞争性编程的新手,我正在努力解决在C ++中接受一行空格分隔整数作为输入并将这些整数存储在向量中的问题。

在Stackoverflow上找到类似问题的答案,我发现那里提供的代码比解决编程问题所需的核心代码占用了更多的时间和空间,而且这些代码段对于这样的任务来说似乎很复杂。所以我编写了自己的解决方案并尝试打印矢量的存储元素,这些元素似乎无法正常工作。

#include <iostream>
#include <vector>
using namespace std;

int main(){

    vector<int> A;
    int tmp;

    while((cin >> tmp) && (!EOF)){
       A.push_back(tmp);
    }

    for(int i : A){
       cout << i << " ";
    } 

    return 0;
}

我编译没有任何错误,似乎按预期工作。但是一旦我完成了提供空格分隔整数序列并点击ENTER,程序突然结束执行而不打印结果。请建议我在代码中进行的任何更正。如果你能提供一些关于C ++是否与Python中的split()类似的信息会很有帮助。一个简单的代码片段是值得赞赏的。

答案

你可以使用std::istream_iterator读取由空格分隔的整数(或其他你有/定义operator>>的东西)到一个容器中:

std::vector<int> v;
std::copy(std::istream_iterator<int>{std::cin}, std::istream_iterator{}, std::back_inserter(v));

如果你只想从一行读取然后首先使用std::getline获取该行,将填充的std::string包装在std::istringstream中并在该流上使用上面的(而不是std::cin

另一答案

您可以将整个输入字符串存储到字符串变量中,然后迭代它并在遇到空格字符时提取子字符串或完成字符串迭代。当你得到数字字符串时,你可以在推送到stoi向量之前使用A函数将它们转换为整数值:

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

using namespace std;

int main(){

    vector<int> A;
    string input;
    size_t index = 0; // keep track of number first index

    getline(cin, input);

    for (size_t i = 0; i < input.size(); ++i) {
        if (input[i] == ' ') {
            A.push_back(stoi(input.substr(index, i)));
            index = i + 1;
        }
    }
    A.push_back(stoi(input.substr(index, input.size())));


    for(int i : A){
       cout << i << " ";
    } 
    cout << endl;

    return 0;
}

以上是关于在Python中有类似于C ++中的split()吗?的主要内容,如果未能解决你的问题,请参考以下文章

python基本数据类型

python的可变与不可变数据类型

Python中是不是有类似于Perl中的“想要”的东西

python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]

有啥类似于 Python 在 c++ 中的索引吗?

python(27):模块