บทนำ
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีหาตัวอักษรพิมพ์ใหญ่ (Uppercase) ตัวแรกในสตริงที่กำหนด โดยใช้ 2 วิธี: Iterative (วนลูป) และ Recursive (เรียกซ้ำ)
ตัวอย่าง
Input: "Tutorialspoint"
Output: "T"
วิธีที่ 1: Iterative (วนลูป)
- กำหนดสตริง
- วนลูปผ่านทุกตัวอักษรในสตริง
- ตรวจสอบว่าตัวอักษรปัจจุบันเป็นพิมพ์ใหญ่หรือไม่ด้วยฟังก์ชัน isupper()
- ถ้าเป็นพิมพ์ใหญ่ ให้คืนค่าตัวอักษรนั้นทันที
โค้ดตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
char firstUpperCaseChar(string str) {
for (int i = 0; i < str.length(); i++)
if (isupper(str[i])) {
return str[i];
}
return 0;
}
int main() {
string str = "Tutorialspoint";
char result = firstUpperCaseChar(str);
if (result == 0) {
cout << "No uppercase letter" << endl;
} else {
cout << result << endl;
}
return 0;
}
วิธีที่ 2: Recursive (เรียกซ้ำ)
- กำหนดสตริง
- เขียนฟังก์ชันเรียกซ้ำรับพารามิเตอร์ 2 ตัว: สตริง และดัชนี (index)
- ถ้าตัวอักษรปัจจุบันเป็นจุดจบสตริง (\0) ให้คืนค่า 0
- ถ้าตัวอักษรปัจจุบันเป็นพิมพ์ใหญ่ ให้คืนค่าตัวอักษรนั้น
- เรียกฟังก์ชันซ้ำด้วยดัชนีถัดไป
โค้ดตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
char firstUpperCaseChar(string str, int i = 0) {
if (str[i] == '\0') {
return 0;
}
if (isupper(str[i])) {
return str[i];
}
return firstUpperCaseChar(str, i + 1);
}
int main() {
string str = "Tutorialspoint";
char result = firstUpperCaseChar(str);
if (result == 0) {
cout << "No uppercase letter";
} else {
cout << result << endl;
}
return 0;
}
ผลลัพธ์
T
สรุป
ทั้งสองวิธีให้ผลลัพธ์เหมือนกัน วิธี Iterative เข้าใจง่ายและมีประสิทธิภาพมากกว่า (ไม่ใช้ stack) วิธี Recursive สั้นกระชับแต่ใช้หน่วยความจำมากกว่า หากมีคำถาม สามารถถามได้ในส่วนความคิดเห็นครับ