คือมันเป็นโจทย์ที่อาจารย์ให้เป็นตัวอย่างนะคับ
ที่ไม่เข้าใจมีเค่บรรทัดเดียวเอง คือ
ืืCode:ืืndigit[c-'0']++;
นี่คือโค๊ดโปรแกรมทั้งหมดนะคับ
[code]#include<stdio.h>
#include<conio.h>
main(){
คือมันเป็นโจทย์ที่อาจารย์ให้เป็นตัวอย่างนะคับ
ที่ไม่เข้าใจมีเค่บรรทัดเดียวเอง คือ
ืื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 ของแต่ละตัวอักษรได้อย่างไร และมีกี่วิธีบ้างคับ
อ๋อ แล้วอีกอย่างนะครับ มันมีระบบการนับยังไงครับ
ขอขอบคุณล่วงหน้าอย่างสูง![]()
![]()
![]()
ถ้าเท่ากับ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 ด้วยนะ![]()
ถ้าเท่ากับ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]++;
แล้วมันก็จะได้เท่ากับ
ผมเข้าใจตามนี้ถูกหรือป่าวคับ ผู้รู้ช่วยยืนยันทีCode:ndigit[99-48]++;![]()
หาได้ในเว็บGoogle ครับ หรือไม่ก็เว็บ http://www.asciitable.com/ นี่ก็ดีครับผมใช้อยู่เลยครับ
เข้าใจถูกต้องครับ เนื่องจาก 'c' คือ c ที่เป็น ตัวอักษร ไม่ใช่ตัวแปรครับมันจะไม่เหมือนกับCode:ndigit[c-'0']++;
เพราะ ตัวอักษร 'c' ตามรหัส ascii มันจะเท่ากับ 99 ไปซะCode:ndigit['c'-48]++;
แล้วมันก็จะได้เท่ากับ
ผมเข้าใจตามนี้ถูกหรือป่าวคับ ผู้รู้ช่วยยืนยันทีCode:ndigit[99-48]++;
[/b]
Actions : (View-Readers)
There are no names to display.