無題
無題
このプログラムは文字列strの中に文字の個数を調べるものですが、
・ch[0]をstr_chnumに渡すとき、どうしてint型なのですか?ch[0]は文字なのですから、char型ではない
のですか?int型は文字も取り扱えるのですか?
・constは静域期間を持つって、書いてありましたが、ここではどうしてconstが使われているのですか?
よろしければ、教えてください。
#include <stdio.h>
int str_chnum(const char str[/url], int c);
int main(void)
{
char str[256]:
char ch[10];
printf("文字列を入力してください:");
scanf("%s", str);
printf("検索する文字を入力してください:");
scanf("%s", ch);
printf("その文字は%d個含まれています。\n", str_chnum(str, ch[0]));
return 0;
}
int str_chnum(const char str[/url], int c)
{
int i;
int count = 0;
for ( i = 0; str != '\0'; i++) {
if (str == c) {
count++;
}
}
return (count);
}
・ch[0]をstr_chnumに渡すとき、どうしてint型なのですか?ch[0]は文字なのですから、char型ではない
のですか?int型は文字も取り扱えるのですか?
・constは静域期間を持つって、書いてありましたが、ここではどうしてconstが使われているのですか?
よろしければ、教えてください。
#include <stdio.h>
int str_chnum(const char str[/url], int c);
int main(void)
{
char str[256]:
char ch[10];
printf("文字列を入力してください:");
scanf("%s", str);
printf("検索する文字を入力してください:");
scanf("%s", ch);
printf("その文字は%d個含まれています。\n", str_chnum(str, ch[0]));
return 0;
}
int str_chnum(const char str[/url], int c)
{
int i;
int count = 0;
for ( i = 0; str != '\0'; i++) {
if (str == c) {
count++;
}
}
return (count);
}
Re:無題
>h[0]をstr_chnumに渡すとき、どうしてint型なのですか?ch[0]は文字なのですから、char型ではない
のですか?int型は文字も取り扱えるのですか?
先ほどもいいましたが、JISコード採用のためです。
str[3]="ABC"
は
str[3]={'A','B','C'}
ともあらわすことができます。
'A'はint型です。
>constは静域期間を持つって、書いてありましたが、ここではどうしてconstが使われているのですか?
strはアドレスを渡すことになります。
もしかしたら呼び出した関数でstrの内容が書き換えられてしまうかも知れません。
これを防ぐためにconstをつけています。
のですか?int型は文字も取り扱えるのですか?
先ほどもいいましたが、JISコード採用のためです。
str[3]="ABC"
は
str[3]={'A','B','C'}
ともあらわすことができます。
'A'はint型です。
>constは静域期間を持つって、書いてありましたが、ここではどうしてconstが使われているのですか?
strはアドレスを渡すことになります。
もしかしたら呼び出した関数でstrの内容が書き換えられてしまうかも知れません。
これを防ぐためにconstをつけています。
Re:無題
> 詳しく教えていただけないでしょうか
根本的なことから説明すると...
一般的な意味での「文字」というのは、言語的な意味を表す記号なり、符号なりのことです。
これは、必ずしも視覚や触覚で知覚できる(形状によって識字できる)ものばかりではありません。
コンピュータで扱う文字は単なる符号であり、表示装置に出力する場合には、その符号を何らかのフォントに置換するわけです。
これを踏まえた上で...
文字たる符号はコンピュータでは数値です。もっと具体的には整数値です。
そして、整数を格納できる型の表現範囲および精度が、文字たる符号を表現するのに十分であれば、どんな型でもよいのです。
極端な話、double型で文字たる符号を表現してもよいのです。ただし、そんな効率の悪いことをする人はいませんから、ライブラリのサポートを受けることは普通できません。必要なら、自分でライブラリを実装する必要があります。
ここで、char型というのは、表現範囲が少なくとも-127~+127または0~255のいずれかである整数型です。
それに対して、基本実行文字集合(乱暴にいえば、半角の英数字記号だと思ってよいでしょう)は、char型で表現できること、そして正の値を持つことが規格上保証されています。
また、int型の表現範囲は少なくとも-32767~+32767ですので、普通はchar型の全表現範囲を包含します。
「普通は」と書いたのは、もし、char型の表現範囲が0~65535でint型の表現範囲が-32768~+32767となるような処理系では、そうならないからです。
このことから、「普通は」、基本実行文字集合であれば、char型でもint型でも表現することができます。
ただし、漢字や(半角であっても)カナ文字などの拡張実行文字集合はこの限りではありません。
根本的なことから説明すると...
一般的な意味での「文字」というのは、言語的な意味を表す記号なり、符号なりのことです。
これは、必ずしも視覚や触覚で知覚できる(形状によって識字できる)ものばかりではありません。
コンピュータで扱う文字は単なる符号であり、表示装置に出力する場合には、その符号を何らかのフォントに置換するわけです。
これを踏まえた上で...
文字たる符号はコンピュータでは数値です。もっと具体的には整数値です。
そして、整数を格納できる型の表現範囲および精度が、文字たる符号を表現するのに十分であれば、どんな型でもよいのです。
極端な話、double型で文字たる符号を表現してもよいのです。ただし、そんな効率の悪いことをする人はいませんから、ライブラリのサポートを受けることは普通できません。必要なら、自分でライブラリを実装する必要があります。
ここで、char型というのは、表現範囲が少なくとも-127~+127または0~255のいずれかである整数型です。
それに対して、基本実行文字集合(乱暴にいえば、半角の英数字記号だと思ってよいでしょう)は、char型で表現できること、そして正の値を持つことが規格上保証されています。
また、int型の表現範囲は少なくとも-32767~+32767ですので、普通はchar型の全表現範囲を包含します。
「普通は」と書いたのは、もし、char型の表現範囲が0~65535でint型の表現範囲が-32768~+32767となるような処理系では、そうならないからです。
このことから、「普通は」、基本実行文字集合であれば、char型でもint型でも表現することができます。
ただし、漢字や(半角であっても)カナ文字などの拡張実行文字集合はこの限りではありません。