ページ 11

変換するプログラム

Posted: 2011年7月10日(日) 13:00
by seemo'
toupper,tolowerを使わずに

大文字を小文字に
小文字を大文字に

するプログラムをつくりたいのですがif文を使えば可能なのでしょうか?

それと文字コードという言葉の意味がわかりません。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 16:07
by non
>文字コードという言葉の意味がわかりません

JISコード表を検索し、大文字と小文字が、常に同じ数だけずれていることを確認します。
その差を計算してみましょう。また、大文字の範囲、小文字の範囲を調べましょう。

そこまで理解したら、
大文字の範囲だったら、小文字に変換するわけですが、範囲をわざわざ16進数などの数値でプログラムを
する必要はなく、 'A'<=ch && ch<='Z' のように記述できます。
また差も 'a'-'A' で求めることができます。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 17:19
by seemo'
以下のプログラムは実行されますが、変換されません。
どこが違いますか?

#include < stdio.h >

void main()
{
char result[100];
char str[100];
int i1;

printf("99文字までの文字列を入力してください:");
scanf("%s",result);
printf("文字列:%s \n", result);

gets(str);
for(i1 = 0; ; i1++){
if(str[i1] >= 'A' && str[i1] <= 'Z')
result[i1] = str[i1] - 'A' + 'a';
else if(str[i1] >= 'a' && str[i1] <= 'z')
result[i1] = str[i1] - 'a' + 'A';
else
result[i1] = str[i1];
if(str[i1] == '\0')
break;
}
printf(">>>%s\n", result);

getchar();
getchar();
}

Re: 変換するプログラム

Posted: 2011年7月10日(日) 17:25
by h2so5
scanf("%s",result); と
gets(str); は

それぞれ何をするつもりで書いているのか説明してください。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 18:03
by seemo'
すいません。
貼り付けるプログラムを間違えました。

以下です。

#include < stdio.h >

void main()
{
     char a[100];
int c;

   while((c = getchar()) != EOF)
   {
    if(c >= 'a' && c <= 'z') /* もし小文字なら*/
c = c - ('a' - 'A'); /* 大文字に変換 */
           else if(c >= 'A' && c <= 'z')
     c = c - ('A' - 'a');
    putchar(c); /* 1文字出力 */
}

}



デバックし、はじめに「99文字までの文字列を入力してください」と表示させたいのですが、どこにprintfを入力すれば表示されますか?
int c; とwhile文の間に入力したりといろいろ試してるのですが表示されません。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 18:13
by box
全角空白によるインデントもどきではなく、
マナーどおりにcodeタグで囲ってほしいです。
全角空白がよけいなところに入っていると、
そのままコピー&ペーストしてコンパイルが通らないんです。
そこのところ、ご協力をお願いします。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 18:25
by seemo'
申し訳ございません。

コード:

#include < stdio.h >

void main()
{
     char a[100];
int c;

   while((c = getchar()) != EOF)
   {
    if(c >= 'a' && c <= 'z') /* もし小文字なら*/
c = c - ('a' - 'A'); /* 大文字に変換 */
           else if(c >= 'A' && c <= 'z')
     c = c - ('A' - 'a');
    putchar(c); /* 1文字出力 */
}

}

Re: 変換するプログラム

Posted: 2011年7月10日(日) 18:47
by box
その、全角空白が入っているコードが、お手元でコンパイルされたコードなんでしょうか。

プレビューしてから投稿しているでしょうか。

C++言語ならば、codeの後ろの =C++ は不要です。
C言語ならば、codeの後ろに =C と書いてください。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 19:26
by non
>はじめに「99文字までの文字列を入力してください」と表示させたいのですが、どこにprintfを入力すれば表示されますか?
int c; とwhile文の間に入力したりといろいろ試してるのですが表示されません。

その場所に入れれば、表示はされるはず。それが、 seemo' さんの質問したい本当の意味ならね。
でも、最初に載せたプログラムが、 seemo' さんの作りたいことだとするなら、質問の意味が違うはず。
もう少し、自分の言いたいことを整理して説明しないと、他人はわかってあげられませんよ。

とりあえず、最初のプログラムを動くようにしました。なるべく、元のプログラムから変えないように
しました。

コード:

#include < stdio.h >

int main(void)
{
	char result[100];
	char str[100];
	int i1;

	printf("99文字までの文字列を入力してください:");
	gets(str);
	for(i1 = 0; ; i1++){
		if(str[i1] >= 'A' && str[i1] <= 'Z')
			result[i1] = str[i1] - 'A' + 'a';
		else if(str[i1] >= 'a' && str[i1] <= 'z') 
			result[i1] = str[i1] - 'a' + 'A';
		else
			result[i1] = str[i1];
		if(str[i1] == '\0')
			break;
	}
	printf(">>>%s\n", result);
	return 0;
}

Re: 変換するプログラム

Posted: 2011年7月10日(日) 19:39
by seemo'
seemo' さんが書きました:

コード:

#include < stdio.h >

void main()
{
     char a[100];
int c;

   while((c = getchar()) != EOF)
   {
    if(c >= 'a' && c <= 'z') /* もし小文字なら*/
c = c - ('a' - 'A'); /* 大文字に変換 */
           else if(c >= 'A' && c <= 'z')
     c = c - ('A' - 'a');
    putchar(c); /* 1文字出力 */
}

}


投稿ミス申し訳ございませんでした。


とりあえず参考プログラムありがとうございます。

書き忘れましたが、上のプログラムに先ほど申し上げたprintfを表示させたいのです。
説明不足で申し訳ございません。

具体的に言うと、上のプログラムに「99文字までの文字列を入力してください:」と表示させたいのです。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 19:41
by seemo'
すいません。
やはり大文字の空白が入ってしまいます。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 19:51
by box
ていうか、お手元にある(はずの)、コンパイル時に使用しているコードを
そのまま貼り付けて、その前後にcodeと/codeを付けるだけなんですけど…。
とんでもなくむずかしいことをお願いしているでしょうか。
なかなか本題に入れないですね。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 20:31
by seemo'
申し訳ございません。

コード:

#include < stdio.h >

void main()
{
    char a[100];
	int c;

	   

        while((c = getchar()) != EOF)
        {
                if(c >= 'a' && c <= 'z') /* もし小文字なら*/
                        c = c - ('a' - 'A'); /* 大文字に変換 */
				else if(c >= 'A' && c <= 'z')
					    c = c - ('A' - 'a');
                putchar(c);                  /* 1文字出力 */
		}

		

	getchar();
	getchar();
}

上記のプログラムにデバックし、はじめに「99までの文字列を入力をしてください:」と表示させたいのです。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 20:38
by box
最後に投稿されたコードでは配列a[]を使っている形跡がないですね。
よって、99文字までという制限はかからないはずです。
Windowsであれば、Ctrl+Zを押してEOFとするまで、何文字でも対応できるはずです。

なお、入力を99文字までに制限することを「デバッグ」とはいいません。
入力を99文字までに制限する、という、プログラムの「仕様」である、といいます。
ある仕様を定めたコードを書いて、それが仕様どおりに動かないときに
コードを修正することを「デバッグ(バグの除去)」といいます。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 21:05
by non
あいかわらず、質問の意味がわかりませんね。

>はじめに「99までの文字列を入力をしてください:」と表示させたいのです。
この部分を実現したいなら下の行を、9行目に入れるだけでしょ。
printf("99文字までの文字列を入力してください:");

何を言いたいのやら。
>上記のプログラムにデバックし
なぞは、やっぱりこの部分か。
主語はどれ?助詞の使い方を間違ってる。

Re: 変換するプログラム

Posted: 2011年7月10日(日) 21:08
by seemo'
解説ありがとうございます。

とりあえず自力で頑張ってみます。