20111112

單行不定筆資料

假設每行的資料並非相同,也沒有固定,該如何處理此類問題?
例如題目要求加總每行整數的和,每一行都是一筆測資,資料數不固定。
input
1 2 3
2 3 5 7
3 3
output
6
17
6

第一種作法:先用fgets讀取整行資料,再用strtok做分解。
#include <stdio.h>
#include <string.h>

#define MAX 100

int main(void)
{
    char s[MAX];
    char *pt;
    int x, sum;

    while (fgets(s, MAX, stdin)) {
        pt = strtok(s, " ");
        sum = 0;
        while (pt) {
            sscanf(pt, "%d", &x);
            sum += x;
            pt = strtok(NULL, " ");
        }
        printf("%d\n", sum);
    }

    return 0;
}


第二種作法,是我在網路上看到的程式碼,比較直觀,也比較好實做。
利用scanf()搭配%s%c的特性,再用sscanf()處理,這種作法也是K&R的其中一題exercise。
#include <stdio.h>

#define MAX 10

int main(void)
{
    char s[MAX];
    char c;
    int x, sum;

    sum = 0;
    while (scanf("%s%c", s, &c) == 2) {
        sscanf(s, "%d", &x);
        sum += x;
        if (c == '\n') {
            printf("%d\n", sum);
            sum = 0;
        }
    }

    return 0;
}

scanf("%s%c", s, &c) == 2的意思是一次讀取一個整數(視為字串),
再加上整數後面的space或是newline。

如此,類似的題目,例如calculator,不定筆字串,皆可以用這種方式處理。

沒有留言: