समस्या विवरण
एक स्ट्रिंग दी गई है, प्रत्येक शब्द के पहले अक्षर को अपरकेस में बदलें और बाकी को लोअरकेस में।
उदाहरण
| इनपुट | आउटपुट |
|---|---|
| "heLLo wORLD" | "Hello World" |
| "sUNIDHi bAnSAL" | "Sunidhi Bansal" |
| "c PROGRAMMING" | "C Programming" |
ASCII-आधारित दृष्टिकोण
- 'A'-'Z': 65-90
- 'a'-'z': 97-122
- अंतर: 32 ('a' - 'A' = 32)
- लोअरकेस → अपरकेस:
ch - 32याch + ('A' - 'a') - अपरकेस → लोअरकेस:
ch + 32याch - ('A' - 'a')
C प्रोग्राम (ASCII मैन्युअल)
#include <stdio.h>
#include <string.h>
void capitalize_first(char str[]) {
int n = strlen(str);
for (int i = 0; i < n; i++) {
bool is_first_char = (i == 0) || (str[i-1] == ' ');
if (is_first_char && str[i] != ' ') {
// अपरकेस में बदलें
if (str[i] >= 'a' && str[i] <= 'z')
str[i] = str[i] - 32; // या str[i] + ('A' - 'a')
} else if (!is_first_char) {
// लोअरकेस में बदलें
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] = str[i] + 32; // या str[i] - ('A' - 'a')
}
}
}
int main() {
char str[100];
printf("स्ट्रिंग दर्ज करें: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = 0; // न्यूलाइन हटाएं
capitalize_first(str);
printf("परिणाम: %s\n", str);
return 0;
}
आउटपुट
स्ट्रिंग दर्ज करें: sUNIDHi bAnSAL परिणाम: Sunidhi Bansal
मानक पुस्तकालय फ़ंक्शन का उपयोग (अनुशंसित)
#include <ctype.h>
void capitalize_first_std(char str[]) {
int n = strlen(str);
bool new_word = true;
for (int i = 0; i < n; i++) {
if (str[i] == ' ') {
new_word = true;
} else if (new_word) {
str[i] = toupper(str[i]);
new_word = false;
} else {
str[i] = tolower(str[i]);
}
}
}
किनारे के मामले संभालना
- एकाधिक स्पेस: कोड सही ढंग से संभालता है
- टैब/न्यूलाइन:
isspace()का उपयोग करें - विराम चिह्न: "hello,world" → "Hello,world" (कॉमा के बाद अपरकेस नहीं)
- संख्याएं/प्रतीक: अपरिवर्तित रहते हैं
उन्नत: शीर्षक केस (छोटे शब्दों को छोड़कर)
bool is_minor_word(char *word) {
char *minors[] = {"a", "an", "the", "and", "or", "but", "in", "on", "at", "to", "of"};
for (int i = 0; i < 11; i++)
if (strcasecmp(word, minors[i]) == 0) return true;
return false;
}
void title_case(char str[]) {
// शब्द-दर-शब्द प्रसंस्करण की आवश्यकता है
// जटिल - अभ्यास के लिए छोड़ दिया गया
}
जटिलता
- समय: O(n) जहां n = स्ट्रिंग लंबाई
- स्थान: O(1) - इन-प्लेस संशोधन
यूनिकोड नोट
ASCII दृष्टिकोण केवल अंग्रेजी अक्षरों के लिए काम करता है। यूनिकोड (हिंदी, चीनी, आदि) के लिए, ICU जैसी उचित लाइब्रेरी या wchar_t/char16_t के साथ भाषा-विशिष्ट केस मैपिंग का उपयोग करें।