簡體   English   中英

如何將字符串數組轉換為 C++ 中的 integer 數組?

[英]How to convert string array to integer array in C++?

我有一串非均勻空格分隔的整數,我想對元素做一些算術運算,所以我決定先將字符串轉換為 integer 數組。 以下是我的方法:

    string s;                //let s="1   2 30 54  899 2 7   3 1";
    cin>>s;
    int n=s.length();
    vector<int>arr(n);

    for(int i=0;i<n;i++)
    {
        if(s[i]==' ')continue;
        else{
            arr.push_back(s[i]-'0');
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<endl; // arr should be{1,2,30,54,899,2,7,3,1};
    }

這種方法有什么問題?

這種方法有什么問題?

  • operator>>僅提取直到std::cin中第一個遇到滿足std::isspace()的字符,因此s不可能在程序中初始化為包含空格的字符串。
  • 您假設字符串n的長度應該是數組的長度。 字符數不等於空格分隔值的數量。
  • 您將arr初始化為長度n ,然后使用push_back() 您應該默認初始化向量,使其開始為空。
  • 您從字符串中分別讀取每個字符,並且push_back()每個數字作為單獨的元素。

您可以使用std::getline()std::cinstd::istringstream初始化字符串,以簡化提取格式化整數:

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

int main()
{
    std::string s;
    std::getline(std::cin, s);
    std::istringstream iss(s);
    std::vector<int> arr;

    for (int i; iss >> i;) {
        arr.push_back(i);
    }

    for(auto& v : arr)
    {
        std::cout << v << std::endl;
    }
}

Godbolt.org

您將循環所有元素並使用stoi進行轉換。 然后將其放入 int-array 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM