查找字符串中的整数总和

时间:2018-05-15 10:43:59

标签: c while-loop fgets

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

  • 输入:abc3x casa2 y34zq
  • 输出:3 + 2 + 3 + 4 = 12

我需要阅读所有句子包含空格来执行此操作,但我的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,因为我知道public class GroupMessages { //TODO: Get the list of seen node; private String message, from, type; private long time; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getType() { return type; } public void setType(String type) { this.type = type; } } 可以读取包括空格在内的整行。

2 个答案:

答案 0 :(得分:1)

由于您可以使用fgets(),因此您可以阅读整行,然后使用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()读取它。

答案 1 :(得分:0)

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

  1. 从用户那里一次性获取整个字符串
  2. 要阅读整个字符串,您可以在使用scanf时使用它。它将整个字符串存储在数组中(s在你的情况下),然后你可以像你一样解析这个数组和执行操作。这里的限制是字符串的长度。您只能接受MAX大小的字符串,因为您的数组大小很多。如果你对此没问题,那么你的代码是正确的。您只需从getChar()删除while

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

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