1-19関数reverse(s)を記述する練習をして、文字列sの中の文字の順序を逆さまにします.この関数を使用して、入力行の文字の順序を逆転するたびにプログラムを作成します.


自分の:
構想
最初の考え方は,関数に文字配列を新規作成し,入力した配列を逆にこの新しい配列に格納し,新しい配列の値を元の配列に割り当てることである.
ソースコード
#include

#define MAXLINE 1000

int getline(char s[],int lim);
void reverse(char s[],int l);

/*
    Write a function reverse(s) that reverses the character string s.
    Use it to write a program that reverses its input a line at a time. 
*/
main()
{
    char line[MAXLINE];   //   
    int len;            //     

    while((len = getline(line,MAXLINE)) > 0)
    {
        reverse(line,len);
        printf("%s
"
,line); } return 0; } // void reverse(char s[],int l) { char t[MAXLINE]; int i = l; for(int j = 0; j < l;j++) { t[j] = s[i-2]; i--; } for(int k = 0;k// ( ) int getline(char s[],int lim) { int c,i,j; j = 0; for(i = 0;(c = getchar()) != EOF && c != '
'
;++i) if(i < lim - 2) { s[i] = c; ++j; } if(c == '
'
) { s[j] = c; ++i; ++j; } s[j] = '\0'; return i; }

エラー:
メイン関数のwhile((len=getline(line,MAXLINE)>0)をwhileと書きます(len=getline(line,MAXLINE)>0)
     ,              。

reverse()関数のt[j]=s[i-2]をt[j]=s[i-1]と書く.
           ,  s[i-1]       。

メモ
デバッグ中にreverse関数でprintfがs[i]になったとき、s[i]の値ではなく、アドレスかもしれないことに気づいた.
  ,        printf    %d   %c。

标题:
構想
同じ文字列を直接反転し、中間変数を使用して文字列の先頭と末尾を入れ替えます.
ソースコード
/* reverse: reverse string s   */
void reverse(char s[])
{
    int i,j;
    char temp;

    i = 0;
    while(s[i] != '\0')  /* find the end of string s */
        ++i;
    --i;                /* back off from '\0'  */
    if(s[i] == '
'
) --i; /* leave newline in place */ j = 0; while(j < i) { temp = s[j]; s[j] = s[i]; //swap the characters s[i] = temp; --i; ++j; } }