คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 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 เลย
ยังไงก็พยายามต่อไปนะครับ
เอาคร่าว ๆ นะ
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 เลย
ยังไงก็พยายามต่อไปนะครับ
แสดงความคิดเห็น
ช่วยอธิบายcodeโปรเเกรมนับจำนวนC++ทีครับเเบบทีละบรรทัดอะครับ
#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
ขอบคุณมากนะครับ