【发布时间】:2021-09-28 08:03:01
【问题描述】:
程序非常简单。该程序的基本目的是将一个数字作为用户的输入,然后将该数字的各个数字存储在一个数组中。为此,我的方法是首先将输入整数转换为字符串。然后我们将遍历字符串的每个字符并将字符转换为数字并将其存储在数组中。 首先我输入数字的长度。然后我输入数字。然后我将该整数转换为字符串,然后遍历字符串的每个位置并将后续数字存储在数组中。 代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int m;
cin>>m;
string s = to_string(m);
int arr[n];
int j=0;
for(auto d:s){
arr[j] = d-'0';
j+=1;
}
for(int i=0;i<n;i++) cout<<arr[i];
}
该代码对所有不以“0”开头的数字都非常有效。但是一旦我给出一个像'0135'这样的输入整数,我就会得到像'13532764'这样的奇怪数组元素。 请帮我找出问题。
【问题讨论】:
-
int arr[n];不是标准 C++,请改用std::vector。在任何情况下,在使用它输出的int值之前,您都不会检查operator>>是否成功。在m之前阅读n有什么意义?你有m在一个string,只需使用字符串的size()来分配int数组,不需要n。 -
问问自己:在
int arr[n];中,n的值是多少? -
注意:使用调试器可以很容易地发现问题。即使您不知道如何使用它,散布在各处的一些打印语句也会有所帮助。例如:
cout << n << " " << m << " " << s << "\n";将显示s只有 3 个字符。 -
即使在
arr[]的数字之间放置一个空格也有助于发现问题,例如:for(int i = 0; i < n; i++) cout << arr[i] << ' ';然后你会看到输出为1 3 5 32764