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

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

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

#1

投稿記事 by KA » 7年前

単語を短縮するために二文字目以降の母音を削除するプログラムを作るという課題が出されたのですが削除するとどうしても同じ文字が連なってしまいます
どうしたら直せますか?

コード:

#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;
}

box
記事: 2002
登録日時: 13年前

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

#2

投稿記事 by box » 7年前

KA さんが書きました:単語を短縮するために二文字目以降の母音を削除するプログラム
仕様を確認したいので、入力例とそれに対する出力例を3個以上挙げてください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 7年前

1文字しかずれないケースしか考えないのではなく、出力位置を表す変数を用意し、
1文字目と、2文字目以降の母音ではない文字を出力にコピーするようなコードに修正し、コンパイルすればいいと思います。
また、10文字固定ではなく、'\0'が来るまでのループにするべきでしょう。
(初期化されていない自動変数の値は不定であり、それを使用すると未定義動作になります)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 7年前

オフトピック
どうして無駄に配列の配列を使って、入力を40個+終わりを示す文字列までに制限しているのだろう?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

KA

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

#5

投稿記事 by KA » 7年前

いろいろ試行錯誤してみましたがよくわかりません

コード:

#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;

}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#6

投稿記事 by みけCAT » 7年前

ごめんなさい、どう教えたらいいかよくわかりません。

コード:

#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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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