【问题标题】:How to seperate integers from input string and convert them to type int to allow calculations on them如何从输入字符串中分离整数并将它们转换为 int 类型以允许对它们进行计算
【发布时间】:2014-08-02 11:21:39
【问题描述】:

正如 Mehdi Algholipour 所写,我想这样做

1.从输入中获取字符串

2.对整数进行单独输入

3.将它们保存到数组中

    cout << "Give me some integers separated with space";

    cin >> string;     // example input 10 210 300 510


    //..some code that seperate input to integer numbers and save them to Array


    //EXPECTED RESULT: Array[0]=10 Array[1]=210 etc...

【问题讨论】:

  • int array_of_ints[4]; for (int i = 0; i &lt; sizeof(array_of_ints); ++i) cin &gt;&gt; array_of_ints[i];是你想要的吗?
  • 否则我不明白你所说的整数数组的意思然后你说你想要每个字符串直到空格并放入字符串数组中,你的问题还不清楚......
  • 你可以使用像proposed here这样的解决方案。
  • 对不起,我没有让它变得更容易。
  • 您的意思是您有一个包含数字的字符串,并希望将这些数字提取到整数数组中?

标签: c++ arrays string sorting integer


【解决方案1】:

我认为你的意思是:

  1. 从输入中获取string
  2. 单独输入Integer 数字
  3. 将它们保存到Array

如果这是你的意思,试试这个代码:

string str;
int arr[1000];  // I supposed 1000 is your Int Array size.
int number = 0, index = 0;

getline(cin, str);  // Get a line of string

for (int i = 0 ; i < str.length() ; i++){   // Processing your str Array
    if (isdigit(str[i])){
        number *= 10;
        number += ((int)str[i] - '0');
    }
    else {
        arr[index++] = number;
        number = 0;
    }
}
arr[index] = number;    // for last element of your input

// Do something you want

【讨论】:

  • @Jacob isdigit(int c) 函数需要一个参数,它是一个字符的ASCII Code。当给定ASCII Code 是一个数字(0-9)时,它返回true,否则返回false
  • 关于你的第二个问题,假设我们的输入是12。此代码首先读取1 并设置number *= 10; =&gt; number = 0 * 10 = 0; number += ((int)str[0] - '0'); =&gt; number = number + 1 = 1。下一步,阅读2。现在设置number *= 10; =&gt; number = 1 * 10 = 10; number += ((int)str[1] - '0'); =&gt; number = number + 2 = 12
【解决方案2】:

试试:

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

int main()
{
    std::regex rgx("\\b\\d+\\b");

    std::string line;

    std::cout << "Please enter numbers separated by spaces and press enter:" << std::endl;

    std::getline(std::cin, line);

    std::sregex_iterator it(line.begin(), line.end(), rgx);
    std::sregex_iterator end;

    std::vector<int> values;
    std::transform(it, end, std::back_inserter(values), [](std::smatch s){ return std::stoi(s.str()); });

    for (int v : values)
        std::cout << v << std::endl;

}

【讨论】:

    【解决方案3】:

    使用stringstream:

    string str;
    getline(cin, str);
    
    stringstream ss(str);
    vector<int> vec;
    
    int Integer;
    while(true)
    {
        ss >> Integer;
        if(!ss)
            break;
    
        vec.push_back(Integer);
    }
    

    live demo

    注意:您需要包含以下标题:&lt;string&gt;&lt;sstream&gt;&lt;vector&gt;

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 1970-01-01
      • 2017-07-28
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      相关资源
      最近更新 更多