ページ 11

文字列から母音を削除する方法

Posted: 2016年7月14日(木) 04:22
by KA
単語を短縮するために二文字目以降の母音を削除するプログラムを作るという課題が出されたのですが削除するとどうしても同じ文字が連なってしまいます
どうしたら直せますか?

コード:

#include<stdio.h>

int main(void)
{
	char word[41][10],m[41][10];
	int i,j,n;
	
	i=0;
	scanf("%s",word[i]);
	while(word[i][0]!='#')
	{
		printf("入力:%s\n",word[i]);
		m[i][0]=word[i][0];
		for(j=1;j<10;j++)
		{
			if(word[i][j]=='a' || word[i][j]=='i' || word[i][j]=='u' || word[i][j]=='e' || word[i][j]=='o')
			m[i][j]=word[i][j+1];
			else
			m[i][j]=word[i][j];
		}
		m[i][j]='\0';
		printf("出力:%s\n",m[i]);
		i++;
		scanf("%s",word[i]);
	}
	
	return 0;
}

Re: 文字列から母音を削除する方法

Posted: 2016年7月14日(木) 07:13
by box
KA さんが書きました:単語を短縮するために二文字目以降の母音を削除するプログラム
仕様を確認したいので、入力例とそれに対する出力例を3個以上挙げてください。

Re: 文字列から母音を削除する方法

Posted: 2016年7月14日(木) 07:39
by みけCAT
1文字しかずれないケースしか考えないのではなく、出力位置を表す変数を用意し、
1文字目と、2文字目以降の母音ではない文字を出力にコピーするようなコードに修正し、コンパイルすればいいと思います。
また、10文字固定ではなく、'\0'が来るまでのループにするべきでしょう。
(初期化されていない自動変数の値は不定であり、それを使用すると未定義動作になります)

Re: 文字列から母音を削除する方法

Posted: 2016年7月14日(木) 07:45
by みけCAT
オフトピック
どうして無駄に配列の配列を使って、入力を40個+終わりを示す文字列までに制限しているのだろう?

Re: 文字列から母音を削除する方法

Posted: 2016年7月14日(木) 12:29
by KA
いろいろ試行錯誤してみましたがよくわかりません

コード:

#include<stdio.h>

int main(void)

{

	char word[41],m[41];

	int i,j;

	i=0;

	scanf("%s",word);

	while(word[0]!='#')

	{

	 printf("入力:%s\n",word);

	 m[i]=word[i];

	 for(j=1;j<='\0';j++)
	 {

	  if(word[j]!=97 || word[j]!='i' || word[j]!='u' || word[j]!='e' || word[j]!='o')

	  m[j]=word[j];

	 }

	 m[j]='\0';

	 printf("出力:%s\n",m);

	
 scanf("%s",word);

	}

	return 0;

}

Re: 文字列から母音を削除する方法

Posted: 2016年7月14日(木) 12:40
by みけCAT
ごめんなさい、どう教えたらいいかよくわかりません。

コード:

#include<stdio.h>

int main(void)
{
	char word[41],m[41];
	int i,j;

	while(scanf("%40s",word)==1 && word[0]!='#')
	{
		printf("入力:%s\n",word);

		for(i=j=0;word[i]!='\0';i++)
		{
			if(i==0 || (word[i]!='a' && word[i]!='i' && word[i]!='u' && word[i]!='e' && word[i]!='o'))
			{
				m[j]=word[i];
				j++;
			}

		}

		m[j]='\0';
		printf("出力:%s\n",m);
	}

	return 0;
}