変換するプログラム

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

変換するプログラム

#1

投稿記事 by seemo' » 14年前

toupper,tolowerを使わずに

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

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

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

non
記事: 1097
登録日時: 15年前

Re: 変換するプログラム

#2

投稿記事 by non » 14年前

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

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

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

seemo'

Re: 変換するプログラム

#3

投稿記事 by seemo' » 14年前

以下のプログラムは実行されますが、変換されません。
どこが違いますか?

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 変換するプログラム

#4

投稿記事 by h2so5 » 14年前

scanf("%s",result); と
gets(str); は

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

seemo'

Re: 変換するプログラム

#5

投稿記事 by seemo' » 14年前

すいません。
貼り付けるプログラムを間違えました。

以下です。

#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文の間に入力したりといろいろ試してるのですが表示されません。

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

Re: 変換するプログラム

#6

投稿記事 by box » 14年前

全角空白によるインデントもどきではなく、
マナーどおりにcodeタグで囲ってほしいです。
全角空白がよけいなところに入っていると、
そのままコピー&ペーストしてコンパイルが通らないんです。
そこのところ、ご協力をお願いします。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

seemo'

Re: 変換するプログラム

#7

投稿記事 by seemo' » 14年前

申し訳ございません。

コード:

#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文字出力 */
}

}

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

Re: 変換するプログラム

#8

投稿記事 by box » 14年前

その、全角空白が入っているコードが、お手元でコンパイルされたコードなんでしょうか。

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

C++言語ならば、codeの後ろの =C++ は不要です。
C言語ならば、codeの後ろに =C と書いてください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 15年前

Re: 変換するプログラム

#9

投稿記事 by non » 14年前

>はじめに「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;
}
non

seemo'

Re: 変換するプログラム

#10

投稿記事 by seemo' » 14年前

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文字までの文字列を入力してください:」と表示させたいのです。

seemo'

Re: 変換するプログラム

#11

投稿記事 by seemo' » 14年前

すいません。
やはり大文字の空白が入ってしまいます。

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

Re: 変換するプログラム

#12

投稿記事 by box » 14年前

ていうか、お手元にある(はずの)、コンパイル時に使用しているコードを
そのまま貼り付けて、その前後にcodeと/codeを付けるだけなんですけど…。
とんでもなくむずかしいことをお願いしているでしょうか。
なかなか本題に入れないですね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

seemo'

Re: 変換するプログラム

#13

投稿記事 by seemo' » 14年前

申し訳ございません。

コード:

#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までの文字列を入力をしてください:」と表示させたいのです。

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

Re: 変換するプログラム

#14

投稿記事 by box » 14年前

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

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

non
記事: 1097
登録日時: 15年前

Re: 変換するプログラム

#15

投稿記事 by non » 14年前

あいかわらず、質問の意味がわかりませんね。

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

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

seemo'

Re: 変換するプログラム

#16

投稿記事 by seemo' » 14年前

解説ありがとうございます。

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

閉鎖

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