查找字符串中整数的总和

Finding sum of ints in a string

我需要输出句子中数字的总和。 例如:

我需要阅读所有包含 space 的句子才能执行此操作,但我的 getchar 循环不起作用。可以帮我找出问题吗?

int main() {

    int i = 0;
    int somma = 0;
    char s[MAX];

    printf("inserisci la stringa : ");
    scanf("%s",s);

        while((s[i] = getchar()) != '\n'){
            i++;
            if(s[i]>'0' && s[i]<'9'){
            somma+= (int)s[i]-(int)'0';
        }
    }
    printf("la somma è = %d", somma);
}

我不必使用 getchar。我更愿意使用 fgets,因为我知道 fgets 可以读取整行,包括 space。

有两种方法可以解决您的问题。

  1. 从用户那里一次性获取整个字符串

要读取整个字符串,您可以在使用时使用 scanf。它将整个字符串存储在数组中(s 在你的例子中)然后你可以解析这个数组并像你一样执行操作。这里的限制是字符串的长度。您只能接受 MAX 大小的字符串,因为您的数组大小如此之大。如果您对此没问题,那么您的代码是正确的。您需要做的就是从 while.

中删除 getChar()
  1. 一次读一个字符.

或者,您可以一次从用户那里读取一个字符,然后立即对该字符执行操作。在这种情况下,您不需要声明数组。一个字符变量就足够了,您可以继续接受来自用户的数据。在这种情况下,丢弃 scanf() 并在您的 while() 中接受一个字符的 getChar() 输出并执行您的操作。

P.S。你的 while() 中有一个小错误,在少数情况下会给你不正确的结果。

因为您可以使用 fgets() you can read the entire line and then use isdigit() 来查找数字。

FILE *fp;
fp = fopen("file.txt" , "r");
if(fp == NULL) {
  perror("Error opening file");
  return(-1);
}

char line[MAX];
if( fgets(line, MAX, fp) == NULL ) { // Read entire line
    perror("Error reading file");
    return -1;
}

int sum = 0;

int len = strlen(line);
for (int i = 0; i < len; i++) {
    if (isdigit( (unsigned char)line[i] )) { // cast handles negative values of line[i]
        sum += line[i] - '0'; // Add integer value to sum
    }
}

基本思路是一样的,只是它直接循环一个字符串,而不是在每一步都尝试用 getchar() 读取它。