我想在单行输入char数组,如:“12 5 232 65 76 435 2345” 并将其输出为int数组
我开始编写代码,但它仅适用于单个数字(例如“3 6 4 5 6”等...)
#include <iostream>
int main(){
char A[100];
int intA[100];
std::cout << "Input Array numbers" << std::endl;
std::cin.getline(A,100);
std::cout << std::endl;
for(int i=0; A[i]!= 0; i++){
if ( A[i] != ' ' ){
intA[i] = (int) A[i] - '0';
std::cout << intA[i] << std::endl;
}
}
return 0;
}
另外一个问题:有人可以解释我实际上是什么“ - '0'”(我知道如果没有它,一个字符转换为int将是和ASCII表示,你需要添加它来获得实际数字)
答案 0 :(得分:1)
使用std::stringstream
和标准算法std::copy
例如(未经测试):
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
int main()
{
char A[100];
int intA[100];
std::cout << "Input Array numbers" << std::endl;
std::cin.getline(A,100);
std::cout << std::endl;
std::istringstream is( A );
int *p = std::copy( std::istream_iterator<int>( is ),
std::istream_iterator<int>(),
std::begin( intA ) );
std::copy( std::begin( intA ), p, std::ostream_iterator<int>( std::cout, " " ) );
std::cout << std::endl;
return 0;
}
答案 1 :(得分:1)
有人可以解释我实际上是什么“ - '0'”
如果已知字符miuend为数字,则使用此选项:减去“0”表示代码点所代表的实际数字。例如:'7' - '0' == 7
。
我不确定这是否有帮助,但这是一个示例实现:
std::string str; // use std::string
std::getline( std::cin, str );
std::istringstream stream(str);
std::vector<int> vec{ std::istream_iterator<int>{stream}, {} };
for( auto i : vec )
std::cout << i << '\n';
答案 2 :(得分:0)
它仅适用于单个数字,因为您正在将字符作为字母处理(42不是42,它是'4'然后是'2'),因此您的for循环在第一个'4'上运行,然后它运行在'2'上 - 也为intA中使用的索引递增i。所以你不是在'4'和'2'中构建42,而是在intA [0]中放置4,然后在intA [1]中放置2。
当您阅读输入时,您需要先将多位数字收集成数字格式而不是单独的字母。
需要-'0',因为你正在处理字母4(ASCII值52)而不是数字4,所以你减去48(ASCII值为'0')来得到数值。
答案 3 :(得分:0)
如果您想手动完成(无论出于何种原因),您当前的方法非常接近您的需求。尝试仅在看到空格时将整数推送到输出数组,否则将前一个数字乘以10并添加新数字。像这样:
int curSum = 0;
int curIndex = 0;
for(int i=0; A[i]!= 0; i++){
if ( A[i] == ' ' ){
intA[curIndex] = curSum;
curIndex++;
std::cout << curSum << std::endl;
curSum = 0;
} else {
curSum = curSum*10;
curSum += (int) A[i] - '0';
}
}
然而,除非这是一个家庭作业问题,否则使用现有的库可能是一个更好的解决方案。
答案 4 :(得分:0)
要将多个字符转换为整数,请将这些字符复制到单独的char []并在其上调用atoi。