我在分配的作业方面遇到了一些困难,并想知道我是否能得到一些帮助.. 无论如何,任务是:“你必须从键盘输入随机字母和数字。字符串应该从程序中分析,之后必须提取所有数字,并且还必须总结它们。 例如输入:asd-12sdf45-56asdf100输出:77
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
int main() {
char stringText[50];
char arraySaver[50];
int i=0, j=0, k=0;
printf("Enter String: ");
scanf("%s", &stringText);
for(i=0; i<strlen(stringText); i++) {
if(isdigit(stringText[i])) {
arraySaver[j]=stringText[i];
j++;
}
}
system("pause");
return 0;
}
答案 0 :(得分:3)
由于这是作业,我不会写出解决方案的代码。但是, 非常接近。你有你的数字数组。您现在需要做的就是:
arraySaver
。sum
。sum
。<强>更新强>
我不确定作业的要求是什么,但是如果你需要查看个别数字那么你就可以了。但是如果你需要查看负数,或者如果你需要考虑将数字作为单个数字运行,那么你将需要做更多的工作:
其余代码应该类似。
答案 1 :(得分:2)
你已经关闭了,但你应该使用fgets()
而不是scanf()
,然后通过其他方式解析字符串(例如:sscanf
,以避免捕获换行符的各种问题,等等)。如果你所要做的就是求和一位数,这就行了。对于更复杂的事情(即:在此代码的情况下abc12abc被总结为“一加二”而不是评估为“十二”),您将需要更复杂的逻辑。
这是一个提示:你需要在现有循环中看到while(isdigit[k++])
的另一个循环。祝你好运!
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define MAX_BUF_LENGTH (50)
int main(void) {
char buf[MAX_BUF_LENGTH] = { 0 };
char digits[MAX_BUF_LENGTH] = { 0 };
char temp[MAX_BUF_LENGTH] = { 0 };
int i, j;
int sum = 0;
printf("Enter String: ");
fgets (buf,MAX_BUF_LENGTH,stdin);
/* Analyze the input string, and backup each digit while maintaining
* a running sum.
*/
for(i=0,j=0; i<strlen(buf); i++) {
if(isdigit(buf[i])) {
digits[j] = buf[i];
j++;
snprintf(temp, MAX_BUF_LENGTH, "%c", buf[i]);
sum += atoi(temp);
}
}
printf("Original String:%s\n", buf);
printf("Digit String: %s\n", digits);
printf("Sum of Digits: %d\n", sum);
system("pause");
return 0;
}