2016-07-30 46 views
1

我遇到了我的程序應該做的最後一項任務的麻煩。 讓我的輸出字符按字典順序排列。多維數組C++中的字典順序

例如,如果我輸入bbbaaa它應有的

Frequencies: a 3 b 3

Frequencies: b 3 a 3

誰能幫助輸出我解決這個問題? 這裏是我的代碼:

#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <ctype.h> 

using namespace std; 

void sort(char letters[], int integers[], int size); 
void swap_letters(char& first, char& second, int& int1, int& int2); 
int index_of_largest(const int integers[], int start_index, int number_used); 

int main(){ 
    const int MAX_CHARS = 200; 
    char letters[MAX_CHARS] = {'\0'}; 
    int integers[MAX_CHARS] = {'\0'}; 
    int index, size = 0; 
    char character; 

    cout << "Enter text:" << endl; 
    cin.get(character); 
    character = tolower(character); 
    while (character!= '.' && size < MAX_CHARS){ 
    if(isalpha(character)){ 
     index = 0; 
     while (index < size){ 
     if(letters[index] == character) 
      break; 
     else 
      index++; 
     } 
     if (index < size){ 
     integers[index] = integers[index] + 1; 
     } 
     else{ 
     letters[index] = character; 
     integers[index] = 1; 
     size++; 
     } 
    } 
    cin.get(character); 
    character = tolower(character); 
    } 
    letters[index] = tolower(letters[index]); 
    sort(letters, integers, size); 

    cout << "Frequencies:"<< endl; 

    for(int i = 0; i < size; i++){ 
    cout << letters[i] << " " << integers[i] << endl; 
    } 
    return 0; 
} 

void sort(char letters[], int integers[], int size){ 
    for (int i = 0; i < size -1; i++){ 
     int j = index_of_largest(integers, i, size); 
     swap_letters(letters[i], letters[j], integers[i], integers[j]); 
    } 
} 
void swap_letters(char& first, char& second, int& int1, int& int2){ 
    char temp_char = first; 
    first = second; 
    second = temp_char; 
    int temp_int = int1; 
    int1 = int2; 
    int2 = temp_int; 
} 
int index_of_largest(const int integers[], int start_index, int number_used){ 
    int max_int = integers[start_index]; 
    int max_int_index = start_index; 
    for (int index = start_index + 1; index < number_used; index++){ 
    if (integers[index] > max_int){ 
     max_int = integers[index]; 
     max_int_index = index; 
    } 
    } 
    return max_int_index; 
} 
+0

你的實現看起來不是C++ 11,因爲你沒有使用任何STL容器/算法(這會使這個任務變得微不足道),而且你正在做所有的C風格。 – Jack

回答

0

的問題是在功能index_of_largest(),你發現大檢查只有integers而忽略letters的索引。

當所有的字母都是不同的頻率,但是當兩個或兩個字母具有相同的頻率時不起作用時,一切順利。在這種情況下,您也應該計入letters

我想你可以用這種方式

int index_of_largest(const int integers[], const char letters[], int start_index, int number_used){ 
    int max_int = integers[start_index]; 
    int max_int_index = start_index; 
    for (int index = start_index + 1; index < number_used; index++){ 
    if ( (integers[index] > max_int) 
     || ( (integers[index] == max_int) 
      && (letters[index] < letters[max_int_index]))){ 
     max_int = integers[index]; 
     max_int_index = index; 
    } 
    } 
    return max_int_index; 
} 

校正功能,但我建議你跟着傑克的建議:使用STL容器/算法時,你可以/時可能

PS:抱歉,因爲我的英語不好。