英文の英単語を反転させる方法

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

英文の英単語を反転させる方法

#1

投稿記事 by りんご » 17年前

入力した英文を単語ごとに区切ってその順番を逆転させるプログラムを作れという課題が出ているのですが、
さっぱりわからないし、明日までなので困っています!
どなたか助けて下さい(>_<)

kazuoni

Re:お願いします!

#2

投稿記事 by kazuoni » 17年前

まずいまいち問題の意味がわかりません。。
例えば
入力:My name is kazuoni .

としたら

出力:. kazuoni is name My

こういうことですか?

管理人

Re:お願いします!

#3

投稿記事 by 管理人 » 17年前

例によって締め切り間近という事なので、答えを作ってみました。
細かい仕様がよくわからなかったので勝手に決めました。
単語はコンマ、ピリオド、スペース、タブによって区切られ、
文章の最初にある場合、最後にある場合、重複している場合読み飛ばします。
#include<stdio.h>

#define STR_MAX 256

int input_str(int strnum[/url], char str[/url]){
	int i,n,c,flag;
	n=1;
	flag=1;
	for(i=0;i<STR_MAX-1;i++){
		c=getchar();
		if(c==' ' || c==',' || c=='.' || c=='\t'){
			if(flag==0){
				str=0;
				strnum[n]=i+1;
				flag=1;
				n++;
				continue;
			}
			else{
				i--;
				continue;
			}
		}
		else if(c=='\n' || c==EOF){
			str=0;
			if(flag==1)
				n--;
			break;
		}
		flag=0;
		str=(char)c;
	}
	if(i==STR_MAX-1)str=0;
	return n;
}

void conv_str(int n, int strnum[/url], char str[/url], char str2[/url]){
	int i,j;
	j=0;
	n--;
	for(i=0;i<STR_MAX-1;i++){
		str2=str[strnum[n]+(j++)];
		if(str2==0){
			str2=' ';
			n--;
			j=0;
			if(n<0)
				break;
		}
	}
	str2=0;
}

int main(void){
	int i,j,n;
	int strnum[STR_MAX/2]={0,};
	char str[STR_MAX],str2[STR_MAX];
	
	n=input_str(strnum,str);

	for(i=0;i<n;i++)
		printf("[%2d]:%s\n",i+1,&str[strnum]);

	conv_str(n,strnum,str,str2);

	printf("%s\n",str2);
	return 0;
}

実行例1

I can speak English
[ 1]:I
[ 2]:can
[ 3]:speak
[ 4]:English
English speak can I

実行例2

.. ,  I can,.. .speak.,  , En.glish... , , , ,,,
[ 1]:I
[ 2]:can
[ 3]:speak
[ 4]:En
[ 5]:glish
glish En speak can I
 
 
こういうことであってますか?

今集中講義か何かでしょうか?

丸投げは規約違反なので、このままでは管理人自ら違反を助長してしまうので、
是非、忙しくなくなった時でいいので、注釈を書いて投稿してみて下さい。
わからない箇所があれば調べるか、聞いて下さい。

閉鎖

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