-1

私は長い間考えてきましたが、プログラムでどこにも行きませんでした。どこから始めたらいいのかわからない。この割り当てでは、単一の関数 main を使用し、iostream ライブラリのみを使用する必要があります。タスクは、10 要素の char 配列を宣言することです。ユーザーから入力を受け取ります。配列に 1 回を超える値が含まれているかどうかを判断します。1回だけ登場するキャラクターは表示しない。

Sample output:
a 2
b 4
..

a と b は文字です。2 と 4 は、配列 B に出現する回数を表します。

入れ子になったループを使用して、文字を配列内のすべての文字と比較し、同様の文字 ID が鳴るたびにカウンターをインクリメントしようとしましたが、予期しない結果が発生しています。

ここにコードがあります

#include <iostream>
using namespace std;
void main()
{

    char ara[10];
    int counter=0;
    cout<<"Enter 10 characters in an array\n";
    for ( int a=0; a<10; a++)
        cin>>ara[a];

    for(int i=0;  i<10;  i++)
    {
       for(int j=i+1; j<10;  j++)
     {
         if(ara[i] == ara[j])
               {
                  counter++;
                  cout<<ara[i]<<"\t"<<counter<<endl;
               }
     }
    }
}
4

4 に答える 4

2

アルゴリズム 2: std::map
コンテナーを宣言 / 定義します。

std::map<char, unsigned int> frequency;
  1. ファイルを開く
  2. 手紙を読む。
  3. 手紙を見つける: frequency.find(letter)
  4. 文字が存在する場合は、頻度を増やします: frequency[文字]++;
  5. 文字が存在しない場合は、頻度に挿入します: frequency[文字] = 1;
  6. すべての文字が処理された後、文字とその頻度 の表示を繰り返します。map
于 2012-12-09T21:58:33.460 に答える
0

ここでは、何をすべきかを説明し、自分でコーディングします。

インクルード ヘッダー ( stdio libs )

main (アプリのエントリ ポイント) を定義します。

入力配列 A[amount_of_chars_in_your_input] を宣言します

ユーザーに入力を要求する出力を書き込む

入力を集める

今主要部分:

unsigned short B[] の別の配列を宣言する

カウンター int i = 0 を宣言します

カウンター int j = 0 を宣言する

配列 A[] をループします (つまり、 i < sizeof ( A ); または a[i] != '\0' )

配列Aに異なる文字がある限りループします

B[] に文字数を格納する

印刷する

これを適用するいくつかのトリックがありますが、あなたはそれを処理することができます

于 2012-12-09T21:09:02.167 に答える
0

これを試して:

unsigned int frequency[26] = {0};
char         letters[10];

アルゴリズム:

  1. ファイルを開く/手紙を読む。
  2. letters新しい文字の配列を検索します。
  3. 新しい文字が存在する場合: その文字の周波数スロットを増やします: frequency[toupper(new_letter) - 'A']++;
  4. 新しい文字がない場合は、配列に追加し、頻度を 1 に設定します。
  5. すべての文字が処理された後、頻度配列を出力します: `cout << 'A' + index << ": " << frequency[index] << endl;
于 2012-12-09T21:52:21.090 に答える
0

これを解決できる 1 つの方法を次に示します。完全なコードを提供しているわけではありません。他の人の宿題に完全な実装を与えるのは良くないと考えられています。

まず、新しい配列に一意の文字のみを入力します。たとえば、入力が次の場合:

abacdadeff

新しい配列には次のもののみを含める必要があります。

abcdef

つまり、すべての文字は 1 回だけ出現する必要があります。-terminate することを忘れないでください\0。これにより、どこで終了するかがわかります (長さが 10 未満になる可能性があるため)。

int次に、元の入力配列の一意の配列からのすべての文字の出現頻度を保持する(またはunsigned、負の出現はできないため) 値の新しい配列を作成します。すべての値は最初は 1 である必要があります。これは、次のような宣言で実現できます。

unsigned freq[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

ここで、一意の配列を反復処理し、元の入力配列で現在の文字を見つけるたびに、頻度配列の対応する要素をインクリメントします。したがって、最後に、上記の入力の場合、次のようになります。

a b c d e f (unique array)
3 1 1 2 1 2 (frequencies array)

これで完了です。入力に各文字が何回出現するかがわかるようになりました。

于 2012-12-09T20:55:27.320 に答える