**問題は「文字列sを逆に並べる関数reverse(s)をかけ」
というものです。
私が考えたのは、文字列sをよみこみ、それを配列s[]にいれる。
そして関数reverse(s)をつかって並べかえる
というものなのですが、結果が出力されません…
めちゃくちゃなコードだと思いますが、間違っているところ、
また、もっとかんたんな考え方などがあれば教えてください!
lang
1#include <stdio.h> 2#define MAXLINE 1000 /* 入力行の最大長 */ 3 4 5int getline(char line[], int maxline); 6void reverse(char line[]); 7 8main() 9{ 10 char line[MAXLINE]; 11 12 while ((getline(line,MAXLINE)) > 0) 13 reverse(line); 14 printf("%s",line); 15} 16 17/*getline : sに行を入れ、長さを返す*/ 18int getline(char s[], int lim) 19{ 20 int c,i; 21 22 for (i = 0; i < lim -1 && (c = getchar()) != EOF && c != '\n'; i++) 23 s[i] = c; 24 if (c == '\n'){ 25 s[i] = c; 26 i++; 27 } 28 s[i] = '\0'; 29 return i; 30} 31 32 33/* reverse : sを tにコピーして値をいれかえる */ 34void reverse(char s[]) 35{ 36 int i,j,k; 37 char t[MAXLINE]; 38 39 i = 0; 40 while((t[i] = s[i]) != '\0') 41 i++; 42 i--;/*iは\0の1個前*/ 43 i--;/*iは改行コードの1個前*/ 44 i = k; 45 46 for (j = 0; j <= k; j++) { 47 s[j] = t[i]; 48 i--; 49 } 50 s[j] = '\n'; 51 j++; 52 s[j] = '\0'; 53}
関数 reverse(s) では
例えば
hello\n
と入力されたとき
s[0] にt[4] の値を代入 (s[0]に oをいれる)
...
s[4] にt[0] (s[4]に hを入れる)
というふうに考えてみました。
回答3件
あなたの回答
tips
プレビュー