如何从输入字符串中分离整数并将它们转换为 int 类型以允许对它们进行计算
Posted
技术标签:
【中文标题】如何从输入字符串中分离整数并将它们转换为 int 类型以允许对它们进行计算【英文标题】:How to seperate integers from input string and convert them to type int to allow calculations on them 【发布时间】: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 < sizeof(array_of_ints); ++i) cin >> array_of_ints[i];
是你想要的吗?
否则我不明白你所说的整数数组的意思然后你说你想要每个字符串直到空格并放入字符串数组中,你的问题还不清楚......
你可以使用像proposed here这样的解决方案。
对不起,我没有让它变得更容易。
您的意思是您有一个包含数字的字符串,并希望将这些数字提取到整数数组中?
【参考方案1】:
我认为你的意思是:
-
从输入中获取
string
单独输入Integer
数字
将它们保存到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; => number = 0 * 10 = 0; number += ((int)str[0] - '0'); => number = number + 1 = 1
。下一步,阅读2
。现在设置number *= 10; => number = 1 * 10 = 10; number += ((int)str[1] - '0'); => 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
注意:您需要包含以下标题:<string>
、<sstream>
、<vector>
【讨论】:
以上是关于如何从输入字符串中分离整数并将它们转换为 int 类型以允许对它们进行计算的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PySpark DataFrame 的列中分离特定字符并使用它们形成一个新列?
如何在C#中分配不应该用Int32转换为1的01,并在引用时给出01