将 char 数组转换为整数数组 C++ 的程序
program that converts a char array into an integer array c++
所以我的学校作业如下:
编写一个程序,要求用户输入一系列个位数的数字,没有任何分隔。将输入作为 C 字符串对象读取。程序应显示字符串中所有个位数的总和。例如,如果用户输入 2518,程序应显示 16,即 2、5、1 和 8 的总和。程序还应显示字符串中的最高和最低数字。
示例输出:
输入一系列数字,它们之间没有空格。
2518
年这些数字的总和是 16
最高数字为 8
最低数字为 1
这是我的代码:
#include<iostream>
#include <cstdlib>
#include<cstring>
using namespace std;
char input[100];
int x[100];
void user_input(char[]);
void char_int_conversion(char[],int[]);
void lowest_highest_digit(int[]);
int main()
{
user_input(input);
char_int_conversion(input,x);
lowest_highest_digit(x);
return 0;
}
void user_input(char input[])
{
cout<<"Enter a series of digits with no spaces between them";
cin>>input;
}
void char_int_conversion(char input[],int x[])
{
for(int i=0;i<=100,i++;)
x[i]=atoi(input[i]);
}
void lowest_highest_digit(int x[])
{
int lowest=x[0];
int highest=x[0];
int total=0;
for(int i=0;i<=100,i++;)
if(x[i]<lowest)
lowest=x[i];
for(int i=0;i<=100,i++;)
if(x[i]>highest)
highest=x[i];
for(int i=0;i<=100,i++;)
total = total+x[i];
cout<<"The sum of those digits is: "<<total<<endl
<<"The highest digit is: "<<highest<<endl
<<"The lowest digit is: "<<lowest<<endl;
}
在第 31 行,我使用 atoi 函数将 char 数组输入转换为整数数组 x,我收到一个错误,指出类型"char"的参数与"const char"类型的参数不兼容。
如果我从 atoi(input[i]) 中删除 [i],我可以让程序构建,但所有输出变量都等于 0;
任何帮助将不胜感激!
要理解的最重要的解决方法是:
for(int i=0;i<=100,i++;)
x[i]=atoi(input[i]);
应该是这样的:
for (int i = 0; i < n; i++)
x[i] = input[i] - '0';
您会看到,数组的索引从零开始,以 size_of_array - 1 结束。因此,您应该使用<
而不是<=
。此外,for 循环语法是错误的。
此外,您想将每个数字转换为整数,因此atoi()
不是您想要的。相反,你应该使用我上面写的,取自这个答案。
一个基本的问题是,无论用户键入多少位数字,您都会读取整个数组,所有 100 个单元格。您应该只检查数组的前 n
个单元格,其中n
是用户键入的位数。
所以,在阅读了这个和这个之后,我用这个替换了你的cin
:
char c;
while ((cin.peek()!='n') && cin >> c)
{
input[n] = c;
n++;
}
你看,我用n
来跟踪用户输入了多少位数字!
其他单元格,在n
第一个单元格未初始化后,它们包含垃圾值!
将它们放在一起,您将得到:
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
char input[100];
int x[100];
int n = 0;
void user_input(char[]);
void char_int_conversion(char[], int[]);
void lowest_highest_digit(int[]);
int main() {
user_input(input);
char_int_conversion(input, x);
lowest_highest_digit(x);
return 0;
}
void user_input(char input[]) {
cout << "Enter a series of digits with no spaces between themn";
char c;
while ((cin.peek()!='n') && cin >> c)
{
input[n] = c;
n++;
}
}
void char_int_conversion(char input[], int x[]) {
//for (int i = 0; i <= 100, i++;)
for (int i = 0; i < n; i++)
x[i] = input[i] - '0';
}
void lowest_highest_digit(int x[]) {
int lowest = x[0];
int highest = x[0];
int total = 0;
for (int i = 0; i < n; i++)
if (x[i] < lowest)
lowest = x[i];
for (int i = 0; i < n; i++)
if (x[i] > highest)
highest = x[i];
for (int i = 0; i < n; i++)
total = total + x[i];
cout << "The sum of those digits is: " << total << endl
<< "The highest digit is: " << highest << endl << "The lowest digit is: "
<< lowest << endl;
}
我相信你还没有学会如何将变量传递给函数,这就是你使用全局变量的原因。如果不是这种情况,则删除全局变量。
另外,由于这是C++,您可能希望使用 std::vector。这样,您就不必考虑数组应该有多少个单元格,也不必跟踪手动给出的数字。请参阅warsac的答案,该答案在编辑后可能无效,但提出了使用向量来解决问题的想法。
-
for(int i=0;i<=100,i++;)
应该for(int i=0;i<100;i++)
<- 这可能会给出垃圾值。请参阅萨马拉斯的回答以获取更详细的解释 -
Atoi拿了一个指针,你正在传递一个数字。
编辑:自从问题更新以来,这显然是无效的。
如果你知道要从标准输入中读取多少个数字,你可以做这样的事情:
#include <vector>
#include <iostream>
using namespace std;
void PrintLargeSmallAndSum(const vector<int>& v)
{
if(v.empty())
return;
int min = v[0];
int max = v[0];
int sum = 0;
for(int i = 0; i < v.size(); ++i)
{
sum += v[i];
if(v[i] < min)
min = v[i];
if(v[i] > max)
max = v[i];
}
cout<<"The sum of those digits is: "<<sum<<endl
<<"The highest digit is: "<<max<<endl
<<"The lowest digit is: "<<min<<endl;
}
int main()
{
vector<int> v;
for(int i = 0; i < 100; ++i)
{
int number;
cin >> number;
v.push_back(number);
}
PrintLargeSmallAndSum(v);
}
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '