3

我在分配作业时遇到了一些困难,想知道是否可以得到一些帮助。无论如何,任务是:“你必须从键盘输入随机字母和数字。字符串应该从程序中分析出来,之后所有数字都必须被提取,它还必须总结它们。例如输入: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; 
} 
4

2 回答 2

3

由于这是家庭作业,我不打算写出解决方案的代码。但是,您已经很接近了。你有你的数字数组。您现在需要做的就是:

  1. 迭代arraySaver
  2. 打印出每个元素。
  3. 在外部变量中保持运行总计,例如sum
  4. 在循环之外,打印sum

更新

我不确定作业的要求是什么,但是如果您需要查看单个数字,那么您可以。但是如果您需要查看负数,或者如果您需要将一个数字的运行视为单个数字,那么您将需要做更多的工作:

  1. 如果字符是负数,那么您假设它可能是负数;设置一个标记它的标志。
  2. 如果字符是数字,则假定它是数字的开头。继续阅读,直到遇到非数字字符,同时跟踪每个数字。
  3. 保存到目前为止您已阅读的数字,同时考虑符号(即,您的标志表明它是否为负数)。

其余代码应该类似。

于 2013-04-19T18:06:17.100 回答
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;
}
于 2013-04-19T18:17:54.080 回答