1 एक स्ट्रिंग के पहले अक्षर को एक अपरकेस में कैसे कवर करें

पर बनाया गया सवाल Sun, Mar 17, 2019 12:00 AM

यह एक स्कूल असाइनमेंट के लिए है। इस फ़ंक्शन का लक्ष्य यादृच्छिक रूप से प्रत्येक सरणी से एक शब्द का चयन करना है और प्रत्येक वाक्य के पहले अक्षर के साथ एक नया सरणी बनाना है, प्रत्येक शब्द के बीच रिक्त स्थान, और अंत में 20 बार की अवधि। वाक्य प्रारूप लेख, संज्ञा, क्रिया, पूर्वसर्ग, लेख और संज्ञा का अनुसरण करता है।

मेरा प्रश्न यह है कि मैं प्रत्येक वाक्य के पहले अक्षर को कैसे बड़ा करूं? मैंने स्ट्रिंग में पहला स्थान निर्धारित करने की कोशिश की - उस स्थिति में चार्ट को बराबर करने के लिए - 32, लेकिन यह सिर्फ प्रोग्राम को क्रैश करता है।

void randomize(void) {

    char *article[] = {"the", "a", "one", "some", "any"};
    char *noun[] = {"boy", "girl", "dog", "town", "car"};
    char *verb[] = {"drove", "jumped", "ran", "walked", "skipped"};
    char *preposition[] = {"to", "from", "over", "under", "on"};
    char *sentence[6];

    int running = 1;

    while(running){

        int location = rand()%5;

        char *captFirstLetter = article[location];

        captFirstLetter[0] = captFirstLetter[0] - 32 ;

        sentence[0] = captFirstLetter;

        sentence[1] = noun[rand()%5];

        sentence[2] = verb[rand()%5];

        sentence[3] = preposition[rand()%5];

        sentence[4] = article[rand()%5];

        sentence[5] = noun[rand()%5];

        for(int i = 0; i < 7; i++){
            printf("%s%s%s", (i == 6) ? "" : sentence[i], (i > 4) ? "" : " ", (i == 5)? ".\n" : "" );
        }
        running ++;

        if(running == 21){
            running = 0;
        }
    }
}
    
0
  1. 2019-03-17 00: 23: 55Z
  2. %c एक चरित्र को प्रिंट करेगा। printf ( "%c%s", toupper(sentence[0][0]), &sentence[0][1]); पहले वर्ण ऊपरी मामले को प्रिंट करेगा और फिर शेष शब्द
    होगा
    2019-03-17 00: 32: 13Z
  3. बस एक सलाह: एक जादू 32 नंबर घटाएं नहीं, यह स्पष्ट होगा यदि आपने 'a' - 'A' लिखा है। तो, captLetter=letter - 'a' + 'A'
    2019-03-17 00: 47: 09Z
    1 उत्तर                              1                         

    ओह, नहीं नहीं नहीं - SegFault:

    आप एक पॉइंटर को स्ट्रिंग लिटरल के साथ बनाते हैं:

    के साथ
        char *captFirstLetter = article[location];
    

    आप संशोधित नहीं कर सकते स्ट्रिंग लिटरल्स article में संकेत द्वारा संदर्भित। उन्हें संशोधित करने का आपका प्रयास, उदा।

        captFirstLetter[0] = captFirstLetter[0] - 32 ;
    

    चालान अपरिभाषित व्यवहार और सबसे शायद एक तत्काल SegFault। स्ट्रिंग शाब्दिक केवल-पढ़ने के लिए मेमोरी में संग्रहीत किए जाते हैं और इन्हें बदला नहीं जा सकता है (सभी पर सबसे प्राचीन और अस्पष्ट हार्डवेयर)

    समस्या को हल करने के लिए, सुनिश्चित करें कि article द्वारा इंगित किए गए तार सरणियाँ हैं और स्ट्रिंग शाब्दिक नहीं हैं। उदाहरण के लिए, article को पर्याप्त आकार के 2 डी सरणी के रूप में घोषित करें:

        char article[][8] = {"the", "a", "one", "some", "any"};
    

    इसके अलावा, जब आप ६०० बिट (कम-केस बिट ऑफ) को फ्लिप करने के लिए 32 को सही ढंग से घटा रहे हैं, तो मानक पुस्तकालय 0600350991111001010350 में मैक्रो प्रदान करता है ताकि केस की जांच सीमित हो सके। लोअर-केस वर्ण। उदाहरण के लिए:

    toupper()

    अंत में, इसे ऊपर के दो मुद्दों को समझाते हुए एक छोटे से उदाहरण में एक साथ रखना, आपके पास होगा:

    <ctype.h>

    उदाहरण का उपयोग करें /आउटपुट

    #include <ctype.h>
    ...
        captFirstLetter[0] = toupper(captFirstLetter[0]);
    

    मुझे बताएं कि क्या आपके पास और प्रश्न हैं।

        
    5
    2019-03-17 00: 37: 56Z
    1. #include <stdio.h>
      #include <ctype.h>
      
      int main (void) {
      
          char article[][8] = {"the", "a", "one", "some", "any"};
          size_t n = sizeof article / sizeof *article;
          int location = 2;
          char *captFirstLetter = article[location];
      
          captFirstLetter[0] = toupper(captFirstLetter[0]);
      
          for (size_t i = 0; i < n; i++)
              puts (article[i]);
      }
      
      का उपयोग करने के तरीके का उल्लेख कर सकते हैं।
      2019-03-17 00: 27: 44Z
    2. आप सही हैं ...
      $ ./bin/cmplitp2a
      the
      a
      One
      some
      any
      
      2019-03-17 00: 33: 25Z
स्रोत रखा गया यहाँ