मैं अक्षरों की आवृत्तियों की जांच के लिए एक सी ++ प्रोग्राम लिख रहा हूं। जब आउटपुट में "abbbsssd" जैसी कोई जगह नहीं होती है, तो मेरा कोड अक्षरों की आवृत्तियों की बिल्कुल जांच कर सकता है। हालांकि, अगर इनपुट में स्पेस है जैसे: "डू बी डू बो।" मेरा आउटपुट सिर्फ "डी 1" और "ओ 1", "बी" और "ई" की कोई आवृत्ति नहीं है।

अपडेट किया गया कोड:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct Letters
{
  Letters() : freq(0){}
  Letters(char letter,int freq) {
    this->freq = freq;
    this->letter = letter;
}
char letter;
int freq;
};

bool Greater(const Letters& a, const Letters& b)
{
   if(a.freq == b.freq)
      return a.letter < b.letter;

   return a.freq > b.freq;
}

int main () {

cout<<"Enter text:" << endl;
string input;
getline(cin, input);

vector<Letters> count;
int letters[26]= {0};

for (int x = 0; x < input.length(); x++) {
    if (isalpha(input[x])) {
        int c = tolower(input[x] - 'a');
        letters[c]++;
    }
}

for (int x = 0; x < 26; x++) {
    if (letters[x] > 0) {
        char c = x + 'a';
        count.push_back(Letters(c, letters[x]));
    }
}

std::sort(count.begin(),count.end(),Greater);

cout<<"Frequencies:" << endl;
for (int x = 0 ; x < count.size(); x++) {
    cout<<count[x].letter <<  " " << count[x].freq<<"\n";
  }


return 0;
}

क्षमा करें अगर यह खराब लिखा गया है, और मदद के लिए अग्रिम धन्यवाद!

c++
-4
pansoh 24 जुलाई 2016, 03:20

3 जवाब

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

अद्यतन

यह मानते हुए कि आपके प्रोग्राम का परीक्षण करने वाले व्यक्ति भी अपरकेस टेक्स्ट दर्ज करते हैं, आपका प्रोग्राम इस तरह दिखना चाहिए:

#include <iostream>
#include <iomanip>

using namespace std;

int alpha[26] = {0};

int main(void)
{
    string text;

    cout << "Enter text:" << endl;
    getline(cin, text);

    for (int i = 0; i < text.length(); i++)
    {
        int a = text[i];

        if (a >= 'A' && a <= 'Z')
        {
            alpha[a - 'A']++;
        }
        else if (a >= 'a' && a <= 'z')
        {
            alpha[a - 'a']++;
        }
    }

    cout << "Frequencies:" << endl;

    for (int i = 0; i < 26; i++)
    {
        if (alpha[i])
        {
            cout << right << char('a' + i) << setw(2) << right << alpha[i] << endl;
        }
    }
    return 0;
}
0
Community 20 जून 2020, 12:12

cin >> text; केवल पहले गैर-व्हाट्सएप वर्ण के बाद पहले व्हाइटस्पेस वर्ण तक ही पढ़ेगा।

इस तरह की पूरी लाइन पढ़ने के लिए आप std::getline() का इस्तेमाल कर सकते हैं :

getline(cin, text);
1
MikeCAT 24 जुलाई 2016, 03:24

खैर, सीन केवल स्पेस डिलीमीटर तक ही पढ़ेगा और पूरी लाइन में पढ़ने के लिए, आपको गेटलाइन (सीन, वी) का उपयोग करने की आवश्यकता है; जहां v वेरिएबल है जिसे आप इनपुट को अंदर रखना चाहते हैं।

0
Athena 24 जुलाई 2016, 08:07