演習1-19 K&R プログラミング言語C

演習1-19

行に含まれる改行文字を逆転しないように処理する。

#include <stdio.h>

#define MAXLINE 1024 /* 入力行の最大長 */

int mygetline(char line[], int maxline);
void reverse(int len, char str[]);

int main(int argc, char *argv[])
{
    int len;
    char line[MAXLINE];

    while ((len = mygetline(line, MAXLINE)) > 0) {
        if (line[len-1] == '\n') {
            --len;
        }
        reverse(len, line);
        printf("%d:%s", len, line);
    }

    return 0;
}

/* mygetline : s に行を入れ、長さを返す */
int mygetline(char s[], int lim)
{
    int c, i;

    for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
        s[i] = c;
    }
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}

/* 文字列 str を逆に並べる */
void reverse(int len, char str[])
{
    int i = 0;
    char tmp;

    len = len - 1;

    while (i < len) {
        tmp = str[i];
        str[i] = str[len];
        str[len] = tmp;
        ++i;
        --len;
    }
}
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»