ページ 11

配列の空白を削除するプログラム

Posted: 2013年4月29日(月) 21:27
by bkf75581
char data_1[5]={'A',' ','B',' ','C'}
の空白を削除して
data_1[5]={'A','B','C',' ',' '}
に変換したいんですがプログラムをどのように書けば良いかわかりません。

while文を使って、空白でなくなるまでi番目とそれ以降の要素を入れ替えるという流れを
考えているのですがうまくいきません。どなたか教えてもらえないでしょうか?

Re: 配列の空白を削除するプログラム

Posted: 2013年4月29日(月) 21:31
by みけCAT
bkf75581 さんが書きました:while文を使って、空白でなくなるまでi番目とそれ以降の要素を入れ替えるという流れを
考えているのですがうまくいきません。どなたか教えてもらえないでしょうか?
まずはこのプログラムを提示してもらえますか?
コードはcodeタグで囲んでください。(半角の[code]と[/code]でコードを挟んでください)

Re: 配列の空白を削除するプログラム

Posted: 2013年4月29日(月) 22:09
by bkf75581

コード:

#include<stdio.h>
int main(void)
{
      int i,j;
      char w1;
      char data_1[5];
      char data_1[0]='X';
      char data_1[1]=' ';  //空白
      char data_1[2]='Y';
      char data_1[3]=' ';  //空白
      char data_1[4]='Z';

      for(i=0;i<5;i++){
         j=0;
         while(data_1[j} !=' '){
             w1=data_1[i];
             data_1[i]=data_1[j];
             data_1[j]=w1;
             j++
}

      for(i=0;i<5;i=0){
         printf("data_1[%d]=%c\n",i,data_1[i]);
}

      return(0);
}

これが今の段階で考えてるいるプログラムになります。

Re: 配列の空白を削除するプログラム

Posted: 2013年4月30日(火) 02:26
by ただの屍のようだ
アルゴリズムは基本的に空間と時間のトレードオフだと思います。
この問題に関しては配列2つ使うやりかたをお勧めします。
*一度コンパイラ通してから載せたほうがいいです。

Re: 配列の空白を削除するプログラム

Posted: 2013年4月30日(火) 10:23
by usao
元の配列を直接書き換えてしまうなら こんな感じでどうでしょうか

コード:

int main()
{
	char D[6] = "X Y Z";

	int pos=0;	//' 'でない文字を見つけたときにその文字D[pos]へ移す
	for( int i=0; i<5; i++ )
	{
		if( D[i] != ' ' )
		{
			if( i != pos )
			{
				D[pos] = D[i];
				D[i] = ' ';
			}
			pos++;
		}
	}

	printf( "[%s]\n",D );
	getchar();
	return 0;
}