เราได้รับสตริงที่มี 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