我正在开发一个程序,要求用户输入C字符串,我的程序会将characters
转换为ints
,然后对它们求和。
然而,当我运行它时,我的程序将数字乘以其中的数字乘以 ie:如果我将123
返回369
或{ {1}}或123*3
。它总结了整个C字符串,而不是像我试图获得它一样添加字符串的一个元素。
当我尝试123+123+123
时,它会告诉我它无法将sum+=atoi(numbers[i]);
转换为char
,但是就像const char*
它正在执行整串。
请为自己和他人解释如何正确地做到这一点。
sum+=atoi(numbers);
答案 0 :(得分:0)
您正在致电
sum+=atoi(numbers);
三次。当然,您sum
为123+123+123
。
您需要做的是通过从角色中减去'0'
将每个字符转换为数字。
for (int i=0; i < strlen(numbers); i++)
{
char c = numbers[i];
if ( isdigit(c) )
{
sum += (c - '0');
}
else
{
// Deal with the case when character is not a digit.
}
}
答案 1 :(得分:0)
如果我把“atoi(数字[i]);”然后它告诉我我不能将char转换为const char *
这是事实。这是因为取消引用char
指针会给你一个char
。并且,由于atoi
想要一个C风格的字符串,它应该是以\0
(或该数组的第一个字符的地址)终止的字符数组。
所以你可以接受角色并从中制作一个字符串但是可能有更好的方法:
sum += numbers[i] - '0';
这将获取给定位置的实际角色并从中减去角色'0'
。假设它是一个数字字符意味着你将得到等价的整数,一个介于0
和9
之间的数字,然后你可以将其加到总和中。
如果必须使用atoi
,则方法如下:
atoi
。执行此操作的循环类似于:
// Create buffer and terminate string.
char str[2];
str[1] = '\0';
// Loop over all characters.
for (int i = 0; i < strlen (numbers); i++) {
// Make string from character, str[1] stays as '\0'.
str[0] = numbers[i];
// Use atoi on that string.
sum += atoi (str);
}