ช่วยอธิบายcodeโปรเเกรมนับจำนวนC++ทีครับเเบบทีละบรรทัดอะครับ

#include<stdio.h>
#include<string.h>
#include<conio.h>

main(){
    char chAll[255];
    char ch;
    int count;
    int i,j,k;
    printf("Input : ");
    scanf("%255s",chAll);
    k = strlen(chAll);
    for(i=0;i<k;i++){
        ch = chAll;                                                                                    
        if(ch !=(char)0){
         count = 0;
         for(j=i;j<k;j++){
             if(ch == chAll[j]&&ch){
                 count = count+1;
                 chAll[j] = (char)0;
                }
         }
         printf("%c = %d\n",ch,count);
         }
    }
                getch();
    }
https://www.slideshare.net/rawinnipamanee/ss-46717810

ขอบคุณมากนะครับ
แก้ไขข้อความเมื่อ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
ผมไม่ได้ทำ C# แต่ก็พอดูได้คร่าว ๆ นะครับ
เอาคร่าว ๆ นะ

    char chAll[255];        //กำหนดตัวแปร
    char ch;
    int count;
    int i,j,k;
    printf("Input : ");    //รับ input เข้ามา
    scanf("%255s",chAll);  //แสกนตัวอักษรที่รับเข้ามาทีละตัว (ไม่เกิน 255 อักษร) แล้วใส่ค่าที่อ่านได้ใน chAll (ที่ต้องไม่เกิน 255 เพราะกำหนดตัวแปร chAll เป็น Array จำนวน 255 และใน C# ไม่ได้มีตัวแปร string จึงกำหนดตัวแปร char เพื่อเก็บข้อมูลแบบ string มังครับ)
    k = strlen(chAll);  //อันนี้น่าจะดึงจำนวน member ในอาเรย์ออกมา

//หลังจากบรรทัดนี้จะเป็นการนับตัวอักษร โดยจะมี 2 loop
    for(i=0;i<k;i++){    // loop แรก เป้าหมายคือไล่ไปทีละอักษร
        ch = chAll;             //ดึงค่าจาก array chAll มาใส่ใน ch ซึ่งตัวแปร ch เป็นตัวแปรแบบ character ซึ่งน่าจะเก็บตัวอักขระได้ทีละตัว (แต่ งง ว่ามันชี้ index ใน Array กันยังไง ถ้าเป็นภาษาอื่น ในรูปแบบง่าย ๆ น่าจะเป็น ch = chAll อะไรแบบนี้นะครับ หรือ C# มันมีรูปแบบในการดึง parameter ในบรรทัดก่อนหน้ามาใช้ได้ ก็ไม่รู้นะครับ ลองศึกษาเพิ่มเอานะ )                                                                        
        if(ch !=(char)0){    //อันนี้ตรวจสอบว่า อักขระที่ดึงมาเป็น null หรือไม่ //(char)0 = null
         count = 0;          //ถ้าไม่ใช่ ให้ตั้งค่า count = 0
         for(j=i;j<k;j++){   //loop ที่สอง ตรวจสอบอักขระที่ได้ใน loop แรก ไปในทุก ๆ ตัวที่เหลือใน chAll เริ่มตั้งแต่จุดที่มันอยู่ (ดังนั้นมันจะนับตัวเองด้วย เป็นเหตุผลที่ว่ากำหนด count = 0)
             if(ch == chAll[j]&&ch){  //ถ้าอักขระเหมือนกัน (อันนี้จะเห็นได้ว่ามีการชี้หรือระบุ สมาชิกใน array ชัดเจนนะครับ ตรง chAll[j]) ส่วน &&ch ไปหาเพิ่มเอานะ // && น่าจะเป็น AND gate แต่ทำไมต้องมา AND กันก็ไม่ทราบเหมือนกัน
                 count = count+1;  //ให้นับเพิ่มเข้าไป  //เพิ่ม count ขึ้นอีก 1
                 chAll[j] = (char)0;  //ให้ตำแหน่งนั้น ที่เหมือนกับตัวอักษรใน loop แรก เป็นค่า null //เพื่อที่ว่าเมื่อ loop แรกตรวจสอบมาถึงตรงนี้จะได้ไม่ต้องนับใหม่ ซึ่งจะทำให้ผลลัพธ์ผิดพลาด
                }  //ปิด if
         } // ปิด loop สอง
         printf("%c = %d\n",ch,count);  //พิมพ์ค่าที่ได้ออกมา แล้วทำ loop 1 ต่อ
         } //ปิด if ใน loop 1
    } // ทำ loop 1 ต่อจนครบ
                getch();  //เรียกโปรแกรมย่อย getch อันนี้ไม่เห็นมีใน code นี้นะ อาจจะอยู่ในที่อ้างอิงมาหรือเปล่า ใน include หนะครับ
    }

ลองดูละกันนะ

ที่จริงคุณควรจะหัดลองทำอะไรเล็ก ๆ ไปทีละส่วนทีละอย่างก่อน
ถ้าคุณจับ code เขามาทั้งหมด แล้วมาดูทีเดียวมันก็จะงงอย่างนี้แหละ นี้ขนาด code ไม่กี่บรรทัดนะ
และหากไปดู code จากหลายแหล่ง บาง Dev เขาก็จะเขียนสั้น ๆ บางคนก็จะเขียนยาว ๆ บางคนก็เขียนแบบลัด ๆ
เช่น count = count+1 จะเขียนเป็น count++ ก็ได้
หรือ เขียน if แบบสั้นสุด ๆ ไปเลย เช่น
SetRelayNumber > 1 ? SetRelayNumber-- : SetRelayNumber ; // (ตัวอย่าง code จาก Arduino)
จะเห็นได้ว่าไม่ได้เขียนคำว่า if เลย

ยังไงก็พยายามต่อไปนะครับ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่