กำหนดสตริงและตัวพิมพ์เล็กแบบผสม เช่น ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ภารกิจคือการแอบแฝงอักขระตัวแรกเพื่อวางตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็กหากเป็นตัวพิมพ์ใหญ่
มาทำความเข้าใจอย่างลึกซึ้งโดยใช้ตัวอย่างง่ายๆ
เช่นเดียวกับที่เราได้รับสตริง “hElLo world” เราต้องแปลงอักขระตัวแรก 'h' ซึ่งอยู่ในตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ 'H' และพักตัวอักษรทั้งหมดก่อนช่องว่างหรือจุดสิ้นสุดของสตริงเป็นตัวพิมพ์เล็ก
ยิ่งกว่านั้นเมื่อเราพบอักขระตัวแรกหลังจากเว้นวรรคเราต้องแปลงเป็นตัวพิมพ์ใหญ่
ตัวอย่าง
Input: str[] = {“heLlO wORLD”} Output: Hello World Input: str[] = {"sUNIDHi bAnSAL"} Output: Sunidhi Bansal
แนวทางที่ใช้ด้านล่างมีดังนี้ −
- เพื่อแก้ปัญหานี้ เราจะใช้ค่า ASCII ของอักขระ
- ASCII ย่อมาจาก American Standards Code for Information Interchange หมายความว่าทุกตัวอักษรมีโค้ดที่เกี่ยวข้องกัน เช่นเดียวกับตัวพิมพ์ใหญ่ A-Z จะได้รับค่าตัวเลขตั้งแต่ 65-90 และตัวพิมพ์เล็ก a-z จะได้รับตัวเลขตั้งแต่ 97-122 ดังนั้นเราจะใช้ค่าเหล่านี้เพื่อแก้ปัญหาของเรา
- เราจะสำรวจทั้งสตริงและ
- ตรวจสอบว่าอักขระตัวแรกหรืออักขระที่อยู่ติดกันหลังจากเว้นวรรค '' อยู่ในช่วง a-z หรือไม่ จากนั้นเราจะลบค่า ASCII ของ 'A' และ 'a' จากนั้นจึงเพิ่มผลลัพธ์ให้กับอักขระนั้น
- หากไม่ใช่อักขระตัวแรกหรืออักขระต่อจากช่องว่าง เราต้องตรวจสอบว่าอักขระเป็นตัวพิมพ์ใหญ่หรือไม่ จากนั้นแปลงเป็นตัวพิมพ์เล็ก ให้เพิ่มค่าของอักขระลงในผลลัพธ์ของการลบ 'a' - 'A'
อัลกอริทึม
Start In Function int firstupper(char str[], int n) Step 1-> Initialize int i Step 2-> Loop For i = 0 And i<n And i++ If i == 0 && str[i] != ' ' || str[i] != ' ' && str[i-1] == ' ' then, If str[i] >= 'a' && str[i]<='z' then, str[i] = (char)(('A'-'a') + str[i] ) End If Else If str[i] >= 'A' && str[i] <= 'Z' then, str[i] = (char)(str[i] + ('a' - 'A')) End If End Function In Function int main(int argc, char const *argv[]) Step 1-> Declare and initialize char str[] = {"sUNIDHi bAnSAL"} Step 2-> Declare n set as sizeof(str)/sizeof(str[0]) Step 3-> firstupper(str, n) Step 4-> Print "%s\n", str End main
ตัวอย่าง
#include <stdio.h> int firstupper(char str[], int n) { int i; for(i = 0; i<n; i++) { if (i == 0 && str[i] != ' ' || str[i] != ' ' && str[i-1] == ' ') { if(str[i] >= 'a' && str[i]<='z') { str[i] = (char)(('A'-'a') + str[i] ); } } else if (str[i] >= 'A' && str[i] <= 'Z') { str[i] = (char)(str[i] + ('a' - 'A')); } } return 0; } int main(int argc, char const *argv[]) { char str[] = {"sUNIDHi bAnSAL"}; int n = sizeof(str)/sizeof(str[0]); firstupper(str, n); printf("%s\n", str); return 0; }
ผลลัพธ์
Sunidhi Bansal