読者です 読者をやめる 読者になる 読者になる

1-19.c

演習 1-19 文字列sを逆に並べる関数reverse(s)を書け。さらに、この関数を使って、入力を一時に1行ずつ逆転するプログラムを書け。

#include <stdio.h>
#define MAXLINE 1000

void reverse(char s[])
{
        int c, len;
        char temp;

        for (len = 0; s[len] != '\0'; ++len)
                ;
        --len;

        for (c = 0; c < len; ++c, --len) {
                temp = s[c];
                s[c] = s[len];
                s[len] = temp;
        }
}

main()
{
        int c;
        int i = 0;
        char line[MAXLINE];
        while ((c = getchar()) != EOF) {
                if (c == '\n') {
                        line[i] = '\0';
                        reverse(line);
                        printf("%s\n", line);
                        i = 0;
                } else {
                        line[i++] = c;
                }
        }
        return 0;
}

$ /a.out < 1-19.c
>h.oidts< edulcni#
0001 ENILXAM enifed#

)][s rahc(esrever diov
{
;nel ,c tni
;pmet rahc

)nel++ ;'0\' =! ]nel[s ;0 = nel( rof
;
;nel--

{ )nel-- ,c++ ;nel < c ;0 = c( rof
;]c[s = pmet
;]nel[s = ]c[s
;pmet = ]nel[s
}
}

)(niam
{
;c tni
;0 = i tni
;]ENILXAM[enil rahc
{ )FOE =! ))(rahcteg = c(( elihw
{ )'n\' == c( fi
;'0\' = ]i[enil
;)enil(esrever
;)enil ,"n\s%"(ftnirp
;0 = i
{ esle }
;c = ]++i[enil
}
}
;0 nruter
}