N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

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
}