输入char数组并将其输出为整数数组

时间:2014-05-29 20:05:35

标签: c++ arrays

我想在单行输入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表示,你需要添加它来获得实际数字)

5 个答案:

答案 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