ページ 11

ポインタ型配列をポインタを使って表示する

Posted: 2011年11月02日(水) 20:40
by ガムテープ
文字列を降順で並び替えるプログラムを作りたいのですが、入れ替えの方法がわかりません。
ワークエリアを使って、並べ替えようとしたのですが、一つ先のアドレスを指定する方法がわから
ず、悩んでいます。

アドバイスお願いします。

コード:

#include<stdio.h>
	main()
{
	char *p_data[]={"Programming1","Algorithm","Programming2","C"},*pd;
	int i=0;
	char **p;

	p = p_data;

	while(i<4){
		while(**p){
			if(**p<**(p+1)){
				pd=**p; 
				**p=**(p+1);
				**(p+1)=pd;
			}
			printf("%c",**p);
			(*p)++;
		}
		printf("\n");
		i++;
		p++;
	}
}

Re: ポインタ型配列をポインタを使って表示する

Posted: 2011年11月02日(水) 21:19
by box
ガムテープ さんが書きました:文字列を降順で並び替えるプログラム

コード:

	char *p_data[]={"Programming1","Algorithm","Programming2","C"},*pd;
どういう結果を得たいのでしょうか?

Re: ポインタ型配列をポインタを使って表示する

Posted: 2011年11月02日(水) 21:27
by ガムテープ
Programming1
Programming2
C
Algorithm

です。

Re: ポインタ型配列をポインタを使って表示する

Posted: 2011年11月02日(水) 21:41
by naohiro19
Visual Studio 2010でのコンパイル結果

コード:

13 : warning C4047: '=' : 間接参照のレベルが 'char *' と 'char' で異なっています。
15 : warning C4047: '=' : 間接参照のレベルが 'char' と 'char *' で異なっています。
MinGWのgccでのコンパイル結果

コード:

In function 'main'
19: warning: assignment makes pointer from integer without a cast
24: warning: assignment makes pointer from pinter without a cast
示されたプログラムに問題があるため実行時に動作停止を引き起こしているようです。

Re: ポインタ型配列をポインタを使って表示する

Posted: 2011年11月02日(水) 22:03
by box
ガムテープ さんが書きました: Programming1
Programming2
本当にそういう結果を得たいのですか?逆ではなくて、ですか?

Re: ポインタ型配列をポインタを使って表示する

Posted: 2011年11月02日(水) 23:26
by ガムテープ
すいません 
逆でした

Programming2
Programming1
の順です

Re: ポインタ型配列をポインタを使って表示する

Posted: 2011年11月02日(水) 23:44
by box
ガムテープ さんが書きました:

コード:

			printf("%c",**p);
そもそも、なにゆえ "%c" なんでしょうか。何をした結果を「1文字ずつ」出力しなければならないとお考えなのでしょうか。

Programming1
などの、「かたまり」で扱う必要はないのでしょうか。

Re: ポインタ型配列をポインタを使って表示する

Posted: 2011年11月04日(金) 09:02
by non
文字列の比較にはstrcmpを使います。