ページ 1 / 1
変換するプログラム
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'
解説ありがとうございます。
とりあえず自力で頑張ってみます。