文字 'a'で始まる文字列を入力すると、プログラムはその文字をチェックして除外しません。文字列に 'a'が最初にない文字列を入力すると、チェックアウトされます。文字列中の文字の出現数をカウントする
は、テキストと出力のラインそれぞれの文字が並んで発生した回数と一緒にテキストで発生するすべての文字のリストを読み込みますプログラムを書く:
はここで完全問題です。センチネル値または区切り文字として機能するピリオドで行を終了します。
文字は、最も頻繁に出現する文字、次に頻繁に出現する文字などの順序でリストされる必要があります。
文字を保持する配列と整数を保持する配列の2つの配列を使用します。入力にはすべて小文字が使用されていると仮定できます。たとえば、入力はとなります。となります。発生の
レター番号 O 3 B 2 D 1 E 1
注:あなたがソートする本の中で選択ソートアルゴリズムの実装を変更することができ、次のような出力を生成する必要があります配列を降順で並べ替えます。プログラムには、文字列型またはC文字列型のいずれかを使用できます。
コード:あなたはletters[max]
でletters[i]
を交換しようとするライン20、で見つかった
#include<iostream>
#include<string>
using namespace std;
void sort(char letters[],int letter_count[])
{
for(int i=0; i<26; i++)
{
int max = i;
for(int j=i; j<26; j++)
{
if(letter_count[j] > letter_count[max]) max = j;
}
int temp = letter_count[i];
letter_count[i] = letter_count[max];
letter_count[max] = temp;
char local = letters[i];
letters[i] = letters[max];
letters[max] = letters[i];
}
}
int main()
{
string str;
char letters[26];
int letter_count[26] = {0 };
cout <<"Enter a line of text :";
getline(cin,str);
for(int i=0; i<str.length(); i++)
letter_count[str[i]-'a']++;
for(int i=0; i<26; i++)
letters[i] = static_cast<char> ('a'+i);
sort(letters, letter_count);
cout <<"Letter Numbers of Occurrence" << endl;
for(int i=0; i<26; i++) {
if(letter_count[i]!=0)
cout << letters[i] << " " << letter_count[i]<<endl;
}
return 0;
}
でなければなりません。このような問題を解決する適切なツールは、デバッガーです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
問題を引き起こす「a」で始まる文字列の例を挙げることができますか? – Polb
@polb私の問題を引き起こす文字列は、例えば「apple」です。 – walletfiber