ここから本文です

K&R本にあったソースコードなのですが、'数’を拾う為にシングルクウォーテーション...

lig********さん

2018/10/715:00:17

K&R本にあったソースコードなのですが、'数’を拾う為にシングルクウォーテーションがある共ううのですが、コンピュータは、文字列としての数として認識できないのですか?

#include <stdio.h>
int main(){
int c,i,nwhite,nother;
int ndigit[10];
for(i = 0; i < 10; ++i){
ndigit[i] = 0;
}
while((c = getchar()) != EOF){
if(c >= '0' && c <= '9'){
++ndigit[c-'0'];
}
else if(c == ' '|| c == '\n' || c == '\t'){
++nwhite;
}
else{
++nother;
}
}
printf("digits = ");
for(i = 0; i < 10; ++i){
printf("%d",ndigit[i]);
}
printf(",white space = %d, other = %d\n", nwhite,nother);
}

閲覧数:
64
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

qui********さん

編集あり2018/10/723:37:17

Cには文字列という型はない、というのもあります(慣習として文字/charの配列で終端に'\0'があるものを文字列として扱う、というだけ)。また「文字列」がある言語でも文字と文字型は厳密に区別されることも多いです。

そもそもコンピュータにとって「文字」はその内容としての意味は持っていません。一連の数値「文字コード」があるだけ。aは単なるコード番号0x61でしかなく、コンピュータにとってはエーでもなければアルファベット一番目の文字でもないのです。そのデータを与えた人間がその値をそのように扱う、と決めているだけの話。
もちろん「数字」もそうで、'0'の文字コードと'9'の文字コードの間にあればそれは数字の文字コードのはずで、その値から'0'を引けば数値が得られる、ということをプログラム上に書いてコンピュータに教えている、そういうプログラムです。

#ただの余談ですが、Cの規格では'0'~'9'までの文字コードは連続であることが保証されますが、'A'~'Z'、'a'~'z'が連続であることは保証されません。

質問した人からのコメント

2018/10/10 08:33:05

有り難うございます!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

kuo********さん

2018/10/723:28:51

>type test.c
main()
{
printf("%c=%02x %c=%02x\n",'0','0','9','9');
printf("%02x %02x %02x\n",' ','\n','\t');
printf("%x",'123');
}

>cl test.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.14.26430 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

test.c
Microsoft (R) Incremental Linker Version 14.14.26430.0
Copyright (C) Microsoft Corporation. All rights reserved.

/out:test.exe
test.obj

>test
0=30 9=39
20 0a 09
313233
>

プロフィール画像

カテゴリマスター

nor********さん

2018/10/716:33:33

> コンピュータは、文字列としての数として認識できないのですか?

「文字列としての数」とは具体的にどういうことですか?

プロフィール画像

カテゴリマスター

n2q********さん

2018/10/715:13:52

出来ますよ。


《参考》

それを実現させるためのプログラムという風にお考え下さい。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる