ページ 11

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

Posted: 2006年12月05日(火) 19:20
by 困ったさん
(1)キーボードから文字列を入力し、文字列sに格納する
(2)文字列sを逆順に並べ替えたものを文字列tに格納する
(3)文字列sと文字列tが同一であるかどうかを比較し、その結果を画面表示する

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

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

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

Posted: 2006年12月05日(火) 20:29
by 管理人
規制はstrlen,strcmpを使わないということだけですか?
stringの標準関数は使わないとかいう規制ではないですか?

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

Posted: 2006年12月05日(火) 20:58
by 管理人
もし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:質問

Posted: 2006年12月06日(水) 15:23
by 困ったさん
なるほど…。細かくコメントでご説明いただきありがとうございます。
プログラムの理解度はまだまだですけど、これから疑問をいろいろ聞きながら
自分でも簡単にプログラミングができるようになりたいです。
管理人さんありがとうございました。

Re:質問

Posted: 2006年12月06日(水) 16:50
by 管理人
何かアルゴリズムでわからない点があったら気軽に聞いてくださいね。
頑張ってください。