文字列の中身を反転させるには

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

文字列の中身を反転させるには

#1

投稿記事 by 困ったさん » 12年前

(1)キーボードから文字列を入力し、文字列sに格納する
(2)文字列sを逆順に並べ替えたものを文字列tに格納する
(3)文字列sと文字列tが同一であるかどうかを比較し、その結果を画面表示する

という処理を行なうプログラムなんですけど・・・。ちなみにs,tの要素の数は50です。
また、これもstrlen,strcmp関数の使用は不可となっています。

入力した文字列を逆順表示するにはデクリメントを使えばできますか?
また入力した文字列を逆順表示した文字列を比較した際、同じなら「同一の文字列」、
異なるなら「異なる文字列」と分岐して表示する場合ifの()の中にはどう書けばいいですか?

管理人

Re:もう1つ問題が・・・

#2

投稿記事 by 管理人 » 12年前

規制はstrlen,strcmpを使わないということだけですか?
stringの標準関数は使わないとかいう規制ではないですか?

管理人

Re:もう1つ問題が・・・

#3

投稿記事 by 管理人 » 12年前

もしstringの標準関数を使わないで、というのなら
これでどうでしょうか?
#include <stdio.h>

int main() { 
	int i=0,len;//文字列の長さを格納するlen
	char s[50],t[50];
	
	printf("Input a sentence. ->\n");//文章入力を促す
	scanf("%s",s);//入力文字を格納

	while(s!='\0')//sにはいっている文字が終端記号になるまでiを数える
		i++;

	len=i-1 , i=0;//\0の手前までの数がほしいからi-1を長さlenに代入
	
	while(i<=len){//文字列の長さだけループさせる
		t=s[len-i];//tは0から、sはその逆から代入させる。
		i++;
	}
	
	t='\0';//tに逆の順番で格納した。最後には終端記号をいれる。
	i=0;
	
	while(s==t && i<=len)//同じかどうか比較する。
		i++;
	
	if(i==len+1)//文字列の数だけループがされていたら、最後まで同じだったということ
		printf("2つの文字列は一致しています。\n");
	else
		printf("2つの文字列は一致していません。\n");
	
	printf("1: %s\n",s);//表示
	printf("2: %s\n",t);

	return 0;
}


上記

while(s==t && i<=len)//同じかどうか比較する。

という部分はsの要素とtの要素を比較しています。
iがlen+1になるまでループが続いたら、配列要素全部が同じだったということです。

困ったさん

Re:質問

#4

投稿記事 by 困ったさん » 12年前

なるほど…。細かくコメントでご説明いただきありがとうございます。
プログラムの理解度はまだまだですけど、これから疑問をいろいろ聞きながら
自分でも簡単にプログラミングができるようになりたいです。
管理人さんありがとうございました。

管理人

Re:質問

#5

投稿記事 by 管理人 » 12年前

何かアルゴリズムでわからない点があったら気軽に聞いてくださいね。
頑張ってください。

閉鎖

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