เราได้รับสตริงที่มี str ของความยาวเท่าใดก็ได้ และภารกิจคือการคำนวณจำนวนพยัญชนะในสตริงที่กำหนดโดยใช้ทั้งวิธีการวนซ้ำและแบบเรียกซ้ำ
พยัญชนะคือตัวอักษรที่ไม่ใช่สระเช่นตัวอักษรยกเว้น a, i, e, o, u ถือเป็นพยัญชนะ ดังนั้นในโปรแกรมด้านล่าง เราจำเป็นต้องหาจำนวนตัวอักษรอื่นที่ไม่ใช่สตริง
การเรียกซ้ำและการวนซ้ำทั้งสองดำเนินการชุดคำสั่งซ้ำๆ การเรียกซ้ำคือเมื่อคำสั่งในฟังก์ชันเรียกตัวเองซ้ำๆ การวนซ้ำคือเมื่อลูปทำงานซ้ำๆ จนกระทั่งเงื่อนไขการควบคุมกลายเป็นเท็จ ความแตกต่างหลักระหว่างการเรียกซ้ำและการวนซ้ำคือการเรียกซ้ำเป็นกระบวนการ นำไปใช้กับฟังก์ชันเสมอ และการวนซ้ำจะถูกนำไปใช้กับชุดคำสั่งที่เราต้องการให้ดำเนินการซ้ำๆ
ตัวอย่าง
Input − string str = “tutorials point” Output − count is 8
คำอธิบาย − ในสตริงที่กำหนด str มีพยัญชนะทั้งหมด 8 ตัว ได้แก่ t, t, r, l, s, p, n และ t
Input − string str = “a e io u” Output − count is 0
คำอธิบาย − ในสตริงที่ให้มา str ไม่มีพยัญชนะ แต่มีเพียงสระ นับจึงเป็น 0
การวนซ้ำ
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนสตริงในตัวแปร สมมติว่า str
-
คำนวณความยาวของสตริงที่กำหนดโดยใช้ฟังก์ชัน length() ซึ่งจะคืนค่าจำนวนเต็มตามจำนวนอักขระในสตริง
-
ใช้ตัวแปรชั่วคราวที่จะเก็บจำนวนองค์ประกอบ
-
เริ่มวนรอบสำหรับ i ถึง 0 จนถึง i น้อยกว่าความยาวของสตริง
-
ภายในลูป ให้ตรวจสอบว่า str[i] เป็นพยัญชนะแล้วเพิ่มค่านับขึ้น 1
-
คืนจำนวน
-
พิมพ์ผลลัพธ์
ตัวอย่าง
// Iterative CPP program #include <iostream> using namespace std; // Function to check for consonant bool consonant(char ch){ // To handle lower case ch = toupper(ch); return !(ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') && ch >= 65 && ch <= 90; } //function to count consonant int countconsonants(string s){ int result = 0; for (int i = 0; i < s.length(); i++){ // To check is character is Consonant if (consonant(s[i])){ ++result; } } return result; } // main function int main(){ string s = "wx abc def"; cout <<"count is: "<<countconsonants(s); return 0; }
ผลลัพธ์
หากเรารันโค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้
count is: 6
แบบเรียกซ้ำ
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนสตริงในตัวแปร สมมติว่า str
-
คำนวณความยาวของสตริงที่กำหนดโดยใช้ฟังก์ชัน length() ซึ่งจะคืนค่าจำนวนเต็มตามจำนวนอักขระในสตริง
-
ใช้ตัวแปรชั่วคราวที่จะเก็บจำนวนองค์ประกอบ
-
สร้างฟังก์ชันเรียกซ้ำที่จะเรียกตัวเองในการคำนวณพยัญชนะในสตริง
-
ตรวจสอบว่าขนาด IF เป็น 1 แล้วส่งคืน str[0].
-
จากนั้นให้คืนค่า recursive_call_to_function เป็น (str, size-1) + ตรวจสอบว่าอักขระเป็นสตริงหรือไม่ (str[size-1])
ตัวอย่าง
// Recursive CPP program #include <iostream> using namespace std; // Function to check for consonant bool consonant(char ch){ // To convert the lower case ch = toupper(ch); return !(ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') && ch >= 65 && ch <= 90; } // to count total number of consonants int consonantcount(string str, int n){ if (n == 1){ return consonant(str[0]); } return consonantcount(str, n - 1) + consonant(str[n-1]); } int main(){ string str = "wx abc def"; cout <<"count is: "<<consonantcount(str, str.length()); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -
count is: 6