1-19関数reverse(s)を記述する練習をして、文字列sの中の文字の順序を逆さまにします.この関数を使用して、入力行の文字の順序を逆転するたびにプログラムを作成します.
4345 ワード
自分の:
構想
最初の考え方は,関数に文字配列を新規作成し,入力した配列を逆にこの新しい配列に格納し,新しい配列の値を元の配列に割り当てることである.
ソースコード
エラー:
メイン関数のwhile((len=getline(line,MAXLINE)>0)をwhileと書きます(len=getline(line,MAXLINE)>0)
reverse()関数のt[j]=s[i-2]をt[j]=s[i-1]と書く.
メモ
デバッグ中にreverse関数でprintfがs[i]になったとき、s[i]の値ではなく、アドレスかもしれないことに気づいた.
标题:
構想
同じ文字列を直接反転し、中間変数を使用して文字列の先頭と末尾を入れ替えます.
ソースコード
構想
最初の考え方は,関数に文字配列を新規作成し,入力した配列を逆にこの新しい配列に格納し,新しい配列の値を元の配列に割り当てることである.
ソースコード
#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;
}
}