Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาตัวอักษรพิมพ์ใหญ่ตัวแรกในสตริง (Iterative และ Recursive) ใน C++


บทนำ

ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีหาตัวอักษรพิมพ์ใหญ่ (Uppercase) ตัวแรกในสตริงที่กำหนด โดยใช้ 2 วิธี: Iterative (วนลูป) และ Recursive (เรียกซ้ำ)

ตัวอย่าง

Input: "Tutorialspoint"
Output: "T"

วิธีที่ 1: Iterative (วนลูป)

  1. กำหนดสตริง
  2. วนลูปผ่านทุกตัวอักษรในสตริง
  3. ตรวจสอบว่าตัวอักษรปัจจุบันเป็นพิมพ์ใหญ่หรือไม่ด้วยฟังก์ชัน isupper()
  4. ถ้าเป็นพิมพ์ใหญ่ ให้คืนค่าตัวอักษรนั้นทันที

โค้ดตัวอย่าง

#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 (เรียกซ้ำ)

  1. กำหนดสตริง
  2. เขียนฟังก์ชันเรียกซ้ำรับพารามิเตอร์ 2 ตัว: สตริง และดัชนี (index)
  3. ถ้าตัวอักษรปัจจุบันเป็นจุดจบสตริง (\0) ให้คืนค่า 0
  4. ถ้าตัวอักษรปัจจุบันเป็นพิมพ์ใหญ่ ให้คืนค่าตัวอักษรนั้น
  5. เรียกฟังก์ชันซ้ำด้วยดัชนีถัดไป

โค้ดตัวอย่าง

#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 สั้นกระชับแต่ใช้หน่วยความจำมากกว่า หากมีคำถาม สามารถถามได้ในส่วนความคิดเห็นครับ