ページ 1 / 1
配列で文字を反転
Posted: 2015年10月22日(木) 22:18
by momon
配列を使って文字列を反転にしたいのですが、string.hを使わずに実行したいのですが、forの部分がどうすればいいのかわかりません。
手伝ってください。
コード:
#include<stdio.h>
int main(void)
{
char a[100];
int i, j;
printf("文字列を入力\n");
scanf("%s", &a);
for()
printf("%s\n",a);
return 0;
}
Re: 配列で文字を反転
Posted: 2015年10月22日(木) 22:29
by box
コード:
#include <stdio.h>
int main(void)
{
char a[100], t;
int i, j;
printf("文字列を入力\n");
scanf("%s", a);
for (i = 0; a[i]; i++)
;
for (j = 0; j < i / 2; j++)
t = a[j], a[j] = a[i - 1 - j], a[i - 1 - j] = t;
printf("%s\n",a);
return 0;
}
Re: 配列で文字を反転
Posted: 2015年10月22日(木) 22:32
by box
C言語以外で書いてみるなど。
コード:
puts STDIN.gets.chomp.reverse
Re: 配列で文字を反転
Posted: 2015年10月22日(木) 22:35
by momon
t = a[j], a[j] = a, a = t;
の部分はどのような意味なんですか?
Re: 配列で文字を反転
Posted: 2015年10月22日(木) 22:45
by box
momon さんが書きました:t = a[j], a[j] = a, a = t;
の部分はどのような意味なんですか?
j番目の文字と(i - 1 - j)番目の文字とを入れ替えています。
例えば、
aの中身が"abcd"であるとします。1個目のfor文で、長さを求めています。文字列の長さであるiという変数には4が入っています。
そして、
0番目('a')と3番目('d')とを入れ替えます。この時点で、aの中身は"dbca"になっています。次に
1番目('b')と2番目('c')とを入れ替えます。この時点で、aの中身は"dcba"になっています。入れ替えはこれでおしまい。
この場合、m番目とn番目を入れ替える、というときのm + nの値がiより必ず1小さいことに注意してください。
別の例
aの中身が"stuvw"であるとします。1個目のfor文で、長さを求めています。文字列の長さであるiという変数には5が入っています。
そして、
0番目('s')と4番目('w')とを入れ替えます。この時点で、aの中身は"wtuvs"になっています。次に
1番目('t')と3番目('v')とを入れ替えます。この時点で、aの中身は"wvuts"になっています。入れ替えはこれでおしまい。
この場合も、m番目とn番目を入れ替える、というときのm + nの値がiより必ず1小さいことに注意してください。
Re: 配列で文字を反転
Posted: 2015年10月22日(木) 22:53
by momon
解決しました!
丁寧な解説ありがとうございます。
Re: 配列で文字を反転
Posted: 2015年10月23日(金) 00:46
by かずま
別解
コード:
#include <stdio.h>
int main(void)
{
char a[100], t;
int i, j;
printf("文字列を入力\n");
scanf("%99s", a);
for (i = 0; a[i]; i++)
;
for (j = 0; j < --i; j++)
t = a[j], a[j] = a[i], a[i] = t;
printf("%s\n", a);
return 0;
}
いかがでしょうか?
解は一つではありません。もっとほかの解答が見たいですか?