配列で文字を反転

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
momon

配列で文字を反転

#1

投稿記事 by momon » 8年前

配列を使って文字列を反転にしたいのですが、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;
}

box
記事: 2002
登録日時: 13年前

Re: 配列で文字を反転

#2

投稿記事 by box » 8年前

コード:

#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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: 配列で文字を反転

#3

投稿記事 by box » 8年前

C言語以外で書いてみるなど。

コード:

puts STDIN.gets.chomp.reverse
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

momon

Re: 配列で文字を反転

#4

投稿記事 by momon » 8年前

t = a[j], a[j] = a, a = t;
の部分はどのような意味なんですか?

box
記事: 2002
登録日時: 13年前

Re: 配列で文字を反転

#5

投稿記事 by box » 8年前

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小さいことに注意してください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

momon

Re: 配列で文字を反転

#6

投稿記事 by momon » 8年前

解決しました!
丁寧な解説ありがとうございます。

かずま

Re: 配列で文字を反転

#7

投稿記事 by かずま » 8年前

別解

コード:

#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;
}
いかがでしょうか?
解は一つではありません。もっとほかの解答が見たいですか?

閉鎖

“C言語何でも質問掲示板” へ戻る