अनिवार्य रूप से, मैं सी में एक विधि बनाने की कोशिश कर रहा हूं जो उपयोगकर्ता से चार सरणी के रूप में वाक्य इनपुट लेता है, और प्रत्येक शब्द को अपनी अलग लाइन के साथ-साथ वाक्य में शब्दों की कुल संख्या पर लौटाता है। उदाहरण के लिए, यदि उपयोगकर्ता "Hi My Name is Fred" इनपुट करता है। फिर, आउटपुट प्रत्येक शब्द को अपनी लाइन पर होना चाहिए और उसके बाद "शब्दों की कुल संख्या: 5" होना चाहिए। यह कोड के लिए काफी आसान लगता है, और यह एक विवरण को छोड़कर था जिसे मैं समझ नहीं पा रहा था। जब शब्दों की कुल संख्या 5 (अधिकतम) नहीं होती है, तो मुझे यादृच्छिक कचरा वर्णों का एक गुच्छा मिलता है, भले ही मैंने पहले ही डिफ़ॉल्ट को '\ 0' पर सेट कर दिया हो। यहाँ कोड है:

int splitAndPrintWords(char s[NUM_STRINGS*STRING_LENGTH]) //NUMSTRINGS is 5 while STRING_LENGTH is 50.
{
    char str[NUM_STRINGS][STRING_LENGTH]; //An array for storing the sentence word by word 
                                          //The first word would be in str[0], the second in str[1], etc.
    
    int count = 0;                                               
    for(int k = 0; k < NUM_STRINGS; k++)          // Here I loop through the 2D array of chars to set 
    {                                             // them all to '\0' values, so they aren't printed.
        for(int p = 0; p < STRING_LENGTH; p++)
        {
            str[k][p] = '\0';
        }
    }

    int k = 0;
    int p = 0;
    for(int i = 0; i < NUM_STRINGS*STRING_LENGTH; i++)  //this loop is for putting each word from the  
    {                                                   //sentence into the new 2d array. 
        if(s[i] != ' ')                                 //I use ' ' as the delimiter between words. 
        {
            str[k][p] = s[i];
            p++; 
        }
        else
        {
            k++;
            p = 0;
        }
    }
    count = k+1;
    for(int i = 0; i < NUM_STRINGS; i++)        //lastly I print each word on it's own line, as intended
    {
        printf("%s\n", str[i]);
    }
    

    return count;                             //returns count so the main method can print how many 
}                                             // words are in the sentence. 

आउटपुट के परिणाम निम्न हैं:

शब्द दर्ज करें (अधिकतम 5): क्यों क्यों

W%Γd±■t■a

शब्दों की संख्या = 1

एक और उदाहरण होगा

शब्द दर्ज करें (अधिकतम 5): यह तीन है यह तीन है

तैसा

शब्दों की संख्या = 3

मैं कूड़ा करकट से कैसे छुटकारा पाऊं?

0
newbie2099 15 सितंबर 2020, 08:03

1 उत्तर

सबसे बढ़िया उत्तर

जब आप s के नल टर्मिनेटर पर पहुंच जाते हैं, तो आपको कॉपी लूप को रोकना होगा। अन्यथा, आप टर्मिनेटर के बाद कचरा पात्रों को str में कॉपी कर रहे हैं।

    for(int i = 0; i < NUM_STRINGS*STRING_LENGTH && s[i] != '\0'; i++)  //this loop is for putting each word from the  
    {                                                   //sentence into the new 2d array. 
        if(s[i] != ' ')                                 //I use ' ' as the delimiter between words. 
        {
            str[k][p] = s[i];
            p++; 
        }
        else
        {
            k++;
            p = 0;
        }
    }
1
Barmar 15 सितंबर 2020, 08:16