如何将输入的数字字符串转换为 int 数组?

Posted

技术标签:

【中文标题】如何将输入的数字字符串转换为 int 数组?【英文标题】:How do I convert an inputted string of numbers into an int array? 【发布时间】:2019-04-02 21:10:06 【问题描述】:

我的编程任务是使用数组对长度不超过 20 位的大整数执行加法和减法运算。这些指令告诉我们在从数组末尾开始存储数字时执行算术运算。例如:

string value1 = "";
cin >> value1; //input 1234
test[19] = 4;
test[18] = 3;
test[17] = 2;
test[16] = 1;

因此执行和和差运算会更容易。任何未使用的数字都应初始化为 0。

我首先编写了一个 for 循环来读取 test[] 数组的最后一个索引到第一个索引。变量 numDigits 跟踪数组中的所有非零值。

include<iostream>
include<string>
using namespace std;

int main()

        string value1 = "";
        int numDigits = 0;
        const int Max_Digits = 20;
        int test[Max_Digits] = 0; 
        test[19] = 10;
        //cin >> value1;

    for (int i = Max_Digits - 1; i >= 0; i--)
    
        if (test[i] != 0)
            numDigits++;
    
    cout << "There are " << numDigits << " nonzero values."; //numDigits == 1
       /*cout << "Your number is: " << test[];*/
       return 0;

因此,如果用户在字符串变量 value1 中输入“1234”,我希望程序在继续赋值之前将字符串转换为数字数组并输出 1234(无逗号或空格)。

【问题讨论】:

你知道如何遍历一个字符串吗?你知道如何将字符“4”转换为数字4吗?你知道如何将元素放入数组吗? 如果用户发疯了,输入了超过 20 个数字会怎样?你不应该改用向量吗? @ConstantinosGlynos 验证稍后进行。现在,我想先将字符串转换为 int 数字数组。另外,我的教授还没有给我们讲过向量,而且说明书上也没有提到它们是一个选项。 @UchennaOnuigbo:很公平......您需要将数字向后插入数组还是向前插入?那么,如果用户插入“1234”,你希望数组中的第一个元素是1,还是4? @ConstantinosGlynos 如果用户插入“1234”,那么第 19 个索引将为 4,然后为 [18] 为 3,为 [17] 为 2,最后为 [16] 为 1。其余元素初始化为 0 【参考方案1】:

我不确定您是需要向后插入还是向前插入,所以下面的演示会同时进行。选择您的选择。

这个想法很简单。对于向后插入,您需要创建一个迭代器i,它初始化为Max_Digits-1,并随着遍历字符串的迭代器递增而递减。对于前向插入,您需要使用std::string::length() 获取字符串的长度,并使用Max_Digits-(strLen-i) 分配值。 std::string::length() 函数将在每次调用时重新计算字符串的长度。不需要为此付出代价,所以不妨将它存储在一个变量中。

#include <iostream>
#include <string>

int main()

    std::string value1 = "";

    std::cout<< "Enter a number up to 20 ints long >> ";
    std::cin >> value1;
    std::cout<<std::endl<< "Entered string: " << value1 <<std::endl;

    constexpr int Max_Digits = 20;

    int backwards[Max_Digits] = 0; 
    int bck_itr = Max_Digits-1;
    for(int i=0; value1[i]!='\0'; ++i, --bck_itr)
        backwards[bck_itr] = value1[i] - '0';

    std::cout<< "Backwards ints: ";
    for (int i=0; i<Max_Digits; ++i)
        std::cout<< backwards[i] <<",";
    std::cout<<std::endl;

    int forward[Max_Digits] = 0;
    int strLen = value1.length();
    for(int i=0; value1[i]!='\0'; ++i)
        forward[Max_Digits-(strLen-i)] = value1[i] - '0';

    std::cout<< "Forward ints:   ";
    for (int i=0; i<Max_Digits; ++i)
        std::cout<< forward[i] <<",";
    std::cout<<std::endl;

对于输入:

12345678

结果是:

Enter a number up to 20 ints long >> 
Entered string: 12345678
Backwards ints: 0,0,0,0,0,0,0,0,0,0,0,0,8,7,6,5,4,3,2,1,
Forward ints:   0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,

示例:https://rextester.com/MDTL51590

ps。如果您不知道constexpr 是什么,那么在这种情况下,只需将其视为加强版const

【讨论】:

有趣的事实:std::string::length 自 C++11 以来保证具有恒定的复杂性。重新计算会很便宜,但无论如何都没有理由不缓存它。 @user4581301:同意!我所知道的唯一一个不会每次都重新计算的 size() 函数来自 std::array

以上是关于如何将输入的数字字符串转换为 int 数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字字符串转换为 int 数组 [重复]

c语言中,如何将字符串数组中的52提取出来,并转换为int类型

将字符串数组转换为 Snowflake 中的数字数组

如何把一个byte数组的数字转换成int

将字符串转换为numpy数组

将字符串数组转换为整数数组