Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम: वाक्य के पहले अक्षर को अपरकेस में बदलें

समस्या विवरण

एक स्ट्रिंग दी गई है, प्रत्येक शब्द के पहले अक्षर को अपरकेस में बदलें और बाकी को लोअरकेस में।

उदाहरण

इनपुटआउटपुट
"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 के साथ भाषा-विशिष्ट केस मैपिंग का उपयोग करें।

  1. - C# में फारेनहाइट को सेल्सियस में बदलना

    तापमान रूपांतरण के लिए मानक सूत्र: फारेनहाइट → सेल्सियस: C = (F - 32) × 5/9 सेल्सियस → फारेनहाइट: F = (C × 9/5) + 32 उदाहरण using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Demo { class MyApplication { static void Main(string[]

  1. - C# में कैरेक्टर केस बदलना (ToUpper/ToLower)

    C# में String.ToUpper() और String.ToLower() मेथड्स का उपयोग करके स्ट्रिंग के कैरेक्टर्स का केस बदला जा सकता है। स्ट्रिंग्स अपरिवर्तनीय (immutable) होती हैं, इसलिए ये मेथड्स नई स्ट्रिंग लौटाते हैं। उदाहरण using System; using System.Collections.Generic; using System.Text; namespace Demo { class

  1. - C# प्रोग्राम: इंटीजर को स्ट्रिंग में कन्वर्ट करें

    C# में इंटीजर को स्ट्रिंग में कन्वर्ट करने के लिए ToString() मेथड का उपयोग करें।उस इंटीजर को सेट करें जिसके लिए आप स्ट्रिंग चाहते हैं:int num = 299;इंटीजर को स्ट्रिंग में कन्वर्ट करने के लिए ToString() मेथड का उपयोग करें:String s; int num = 299; s = num.ToString();उदाहरणC# में इंटीजर को स्ट्रिंग में