从字符串中提取字母和数字

时间:2013-04-19 17:58:26

标签: c

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

2 个答案:

答案 0 :(得分:3)

由于这是作业,我不会写出解决方案的代码。但是, 非常接近。你有你的数字数组。您现在需要做的就是:

  1. 迭代arraySaver
  2. 打印出每个元素。
  3. 在外部变量中维护一个总计,例如sum
  4. 在循环外部,打印sum
  5. <强>更新

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

    1. 如果角色为负数,则假设它可能是负数;设置一个标记为这样的标志。
    2. 如果字符是数字,则假设它是数字的开头。继续阅读,直到遇到非数字字符,同时跟踪每个数字。
    3. 保存您目前所读的数字,同时考虑该符号(即您的旗帜是否为负数)。
    4. 其余代码应该类似。

答案 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;
}