คือมันเป็นโจทย์ที่อาจารย์ให้เป็นตัวอย่างนะคับ
ที่ไม่เข้าใจมีเค่บรรทัดเดียวเอง คือ
ืืCode:ืืndigit[c-'0']++;
นี่คือโค๊ดโปรแกรมทั้งหมดนะคับ
[code]#include<stdio.h>
#include<conio.h>
main(){
Printable View
คือมันเป็นโจทย์ที่อาจารย์ให้เป็นตัวอย่างนะคับ
ที่ไม่เข้าใจมีเค่บรรทัดเดียวเอง คือ
ืืCode:ืืndigit[c-'0']++;
นี่คือโค๊ดโปรแกรมทั้งหมดนะคับ
[code]#include<stdio.h>
#include<conio.h>
main(){
เอาแบบง่ายๆ นะCode:ndigit[c-'0']++;
สมมติให้ c = '5'
ndigit[c-'0']++; >>> ndigit['5'-'0']++ >>> ndigit[0x35-0x30]++ >>> ndigit[5]++
สมมติให้ ndigit[5] = 1
ndigit[5]++ >>> ndigit[5] + 1 >>> 2
ภาษา c จะประมวลผลเกี่ยวกับ character ในรูปแบบของ รหัส ascii ครับ
เพราะเฉพาะคำสั่ง c=getchar() ก็จะเก็บ รหัส ascii ไว้ในตัวแปร c ยกตัวอย่างเช่น
- ถ้าเราพิมพ์เลข 1 ไป ตัวแปร c ก็จะเก็บค่า 49 (เป็น รหัส ascii ของตัวอักษร 1)
ดังนี้นประโยค
ก็คือ การเอา 49 (ค่าของตัวแปร c) ลบกับ รหัส ascii ของ 0 ซึ่่งก็คือ 48Code:ndigit[c-'0']++;
เมื่อแทนค่า character ด้วย รหัส ascii จะได้
ซึ่งก็คือCode:ndigit[49-48]++;
นั่นเองCode:ndigit[1]++;
- แต่ถ้าเราพิมพ์ิเลข 2 ลงไป ในตัวแปร c ก็จะเก็บค่า 50 (รหัส ascii ของตัวอักษร 2)
ดังนั้นจะได้
ซึ่งก็คือCode:ndigit[50-48]++;
นั่นเองCode:ndigit[2]++;
จาก 2 ตัวอย่างที่ใ้ห้คาดว่าน่าจะพอเข้าใจจุดมุ่งหมายของคำสั่ง
แล้วนะครับ :)Code:ndigit[c-'0']++;
ส่วนอื่นๆ ของโปรแกรมก็ไม่ยาก ให้ลองอ่านๆ ดูละกันครับ จะได้เป็นการฝึกทักษะ ;)
ขอบคุณท่านอย่างมากทั้งสองที่มาช่วยตอบคับ
คือผมมีข้อสงสัยอีกอย่างหนึ่งว่า เราจะสามารถทราบค่ารหัส ascii ของแต่ละตัวอักษรได้อย่างไร และมีกี่วิธีบ้างคับ
อ๋อ แล้วอีกอย่างนะครับ มันมีระบบการนับยังไงครับ
ขอขอบคุณล่วงหน้าอย่างสูง :lol: :lol: :lol:
ถ้าเท่ากับCode:ndigit[c-'0']++;
แล้วทำไมเขาไม่ใช้Code:ndigit['c'-48]++;
ซะเลยอะครับ หรืออีกในความหมายหนึ่งคือCode:ndigit['c'-48]++;
และCode:ndigit[c-'0']++;
ต่างกันไงครับCode:ndigit['c'-48]++;
กับCode:ndigit[c-'0']++;
ความหมายเหมือนกันครับCode:ndigit[c-48]++;
แต่ที่ใช้
เพราะเข้าใจง่ายกว่าCode:ndigit[c-'0']++;
เรื่องนี้ถ้าเขียนโปรแกรมไปสักพักจะเข้าใจมากขึ้นครับ
แต่ก็ต้องศึกษาเกี่ยวกับรหัส ascii ด้วยนะ ;)
:unsure: จากที่ผมเข้าใจนะคับQuote:
ถ้าเท่ากับCode:ndigit[c-'0']++;
แล้วทำไมเขาไม่ใช้Code:ndigit['c'-48]++;
ซะเลยอะครับ หรืออีกในความหมายหนึ่งคือCode:ndigit['c'-48]++;
และCode:ndigit[c-'0']++;
ต่างกันไงครับCode:ndigit['c'-48]++;
[/b]
จะเท่ากับCode:ndigit[c-'0']++;
แต่Code:ndigit[c-48]++;
มันจะไม่เหมือนกับCode:ndigit[c-'0']++;
เพราะ ตัวอักษร 'c' ตามรหัส ascii มันจะเท่ากับ 99 ไปซะCode:ndigit['c'-48]++;
แล้วมันก็จะได้เท่ากับ
ผมเข้าใจตามนี้ถูกหรือป่าวคับ ผู้รู้ช่วยยืนยันที :mellow:Code:ndigit[99-48]++;
หาได้ในเว็บGoogle ครับ หรือไม่ก็เว็บ http://www.asciitable.com/ นี่ก็ดีครับผมใช้อยู่เลยครับ
เข้าใจถูกต้องครับ เนื่องจาก 'c' คือ c ที่เป็น ตัวอักษร ไม่ใช่ตัวแปรครับQuote:
มันจะไม่เหมือนกับCode:ndigit[c-'0']++;
เพราะ ตัวอักษร 'c' ตามรหัส ascii มันจะเท่ากับ 99 ไปซะCode:ndigit['c'-48]++;
แล้วมันก็จะได้เท่ากับ
ผมเข้าใจตามนี้ถูกหรือป่าวคับ ผู้รู้ช่วยยืนยันที :mellow:Code:ndigit[99-48]++;
[/b]