如何从char或string中提取数字?

时间:2015-10-25 21:28:41

标签: c

这是我在这个论坛上的第一个问题,而且相当棘手。

我正在处理C中输入字符的问题,直到您输入符号!。然后你必须提取数字并打印它们的总和。

输入格式为: adasdas12fef 1 asdasdas43 da3 23adead

输出应为:82(12 + 1 + 43 + 3 + 23)

注意:禁止使用string

对不起,我很抱歉。

如果对其他细节或用法有任何疑问,请随时发表评论。

2 个答案:

答案 0 :(得分:0)

我认为这对你有用:

#include <stdio.h>

int main(void) {
    // declear and initialize the variables
    char input[200];
    char c;
    int i = 0, j = 0, sum = 0, num = 0, next = 0;

    // get input until '!' is pressed
    while((c=fgetc(stdin)) != '!') {
        input[i] = c;
        i++;
    }

    // end string
    input[i] = '\0';

    // loop through the string
    // if numeric found, will add to sum.
    // for 2 numeric (one after another) will multiply
    // previous one with 10 and add with the current one
    for (j = 0; j < i; j++) {
        if (next == 1) {
            next = 0;
            num = input[j-1] - '0';
            num *= 10;
            num += (input[j] - '0');
            sum += num;
            continue;
        }

        if (input[j] >= '0' && input[j] <= '9') {
            if (input[j+1] >= '0' && input[j+1] <= '9') {
                next = 1;
            } else {
                sum += (input[j] - '0');
            }
        }
    }

    printf("sum: %d\n", sum);
}

请不要索要完整的代码。我发现这个问题很有趣,这就是我这样做的原因。首先尝试,然后询问您是否遇到任何具体问题。

答案 1 :(得分:0)

如何让一些伪代码入门?

state = spaces
number = 0
Forever {
  Get ch
  if (ch == EOF or `!`) {
    if (state == num) print number
    break;
  }
  if (state == space) {
    if (ch is a digit) {
       number = digit
       state = num
    }
  } else {
    if (ch is a digit) {
       number = number * 10 + digit
    } else if (ch is a space) {
       print number
       state = space 
       number = 0
    }
  }
}