文字列

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

文字列

#1

投稿記事 by もも » 16年前

初めて質問させてもらいます。

文字列について質問があります^^

cのプログラミングを勉強しているのですが、
最近わからなくなってしまって友達にこのサイトのことを聞いてきました。

英語単語と日本語単語の対応表を配列で
char *dic[10][2] = {
{"important","大切な"}・・・}
のようにつくり、空白で区切られた英語単語列をgetcharで
行単位に読み込み,その中の英語を日本語にかえて表示するプログラムをつくるというもんだいです。(辞書にないものはそのまま出力できるようにする)

これでいきなりわからないことがでてきてしまいました。
getcharは1文字づつ入力するものなので文字列が入力できなくてこまってます。
行単位に読み込むというのもよくわかりません。
わかるかたよろしくお願いします。
できればやさしい回答をお願いします☆。

御津凪

Re:文字列

#2

投稿記事 by 御津凪 » 16年前

行単位に読み込む関数に、 gets 関数があります。
(ファイルから読み込むなら fgets 関数)

こちらを使って、用意したバッファを渡せば、
バッファに一行読み込まれます。

その後に対応表と照らし合わせ、問題に合わせて出力し、
読み込んだバッファを全てチェックしたら、また一行読むように
コードを書いていけば良いでしょう。

一応、 getchar 関数を使っても以下のように、
char	  buf[1000];
char* c;

c = buf;
while((*c = getchar()) != '\n'){
    ++c;
}
*c = '\0';
と、処理すれば、 buf に一行読み込まれます。

Dixq (管理人)

Re:文字列

#3

投稿記事 by Dixq (管理人) » 16年前

>ももさん

こんにちは。ここのサイトを、お友達に聞いてくださったようで、その方によろしくお伝えくださいm(_ _)m
御津凪さんが的確に答えていらっしゃるので回答の必要ないかもしれませんけど、
getcharでも読み取ること出来ます。
1文字読み取る関数ではありますが、それを100回繰り返せば100文字取れます。

とりあえずこんなサンプルを作ってみました。
#include <stdio.h>
#include <string.h>

char DataStr[5][2][32]={
	{"This","これ"},
	{"is","は"},
	{"a","一つの"},
	{"pen","ペンです"},
	{".","。"},
};

void GetStr(char str[/url]){
    int i=0;
	char ch; /* (1) */
	//受け取った1文字が改行文字で無い限り格納し続ける
	while((ch=getchar())!='\n'){
		str = ch; /* (2) */
		i++;
	}
	str = '\0';
}

int main(){
	int i,s;
	char InputStr[32];
	for(i=0; i<5; i++){
		GetStr(InputStr);//入力文字列をstrに格納する
		for(s=0; s<5; s++){
			if(strcmp(InputStr, DataStr[0]) == 0){//DataStrと同じだったら表示してループから抜ける
				printf("%s -> %s\n",InputStr,DataStr[1]);
				break;
			}
		}
	}
	return 0;
}

実行結果

This
This -> これ
is
is -> は
a
a -> 一つの
pen
pen -> ペンです
.
. -> 。

(1),(2)をはじめ、間違いや改善の余地のある部分がいろいろありますので、そこを見つけて改善してみてください。
型があっているか、オーバーフローしないか、などに注意してください。
文字列の対は構造体を利用したほうがわかりやすそうでしたが、3次元配列でやっていらっしゃるようなのでそのまま利用しました。
もし余力があれば構造体にしてみてください。
また、変換した文字列は最後に連続で表示するべきでしょうから、そのような処理になるように改良してみてください。
また、strcmpの関数を自作するなど、標準関数をなるべく自作するようにすると力がつくと思います。

ももさんが今どれ位理解されているのかわからないので、どの辺からどれ位アドバイスすればいいかわかりませんが、
とりあえずこのサンプルを元に、課題を完成させてみてください。
途中でわからなくなったらまた聞いてください。

 

閉鎖

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