2016-07-30 4 views
1

내 프로그램에서해야하는 마지막 작업에 문제가 있습니다. 내 출력 문자를 사전 순으로 사용합니다. 예를 들어다차원 배열의 사전 식 순서 C++

, 내가 입력 bbbaaa

Frequencies: a 3 b 3

하지

Frequencies: b 3 a 3

수있는 사람의 도움의 출력을해야하는 경우 내가이 문제를 해결하니? 당신은 단지 integersletters을 무시하고 가장 큰 검사의 인덱스를 감지합니다

#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

STL 컨테이너/알고리즘을 사용하지 않아 구현이 C++ 11이 아닌 것으로 보이지만 (이 작업은 사소한 작업입니다) 모든 C 스타일을 수행하고 있습니다. – Jack

답변

0

문제는 기능 index_of_largest()에 있습니다 다음은 내 코드입니다.

모든 문자가 서로 다른 주파수를 사용하지만 두 개 또는 문자가 같은 빈도를 사용하는 경우 모두 제대로 작동하지 않습니다. 이 경우 카운트 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; 
} 

에서 함수를 수정할 수 있다고 생각하지만 난 당신이 잭의 제안에 따라하는 것이 좋습니다 : 당신이 할 수있는 /시가

PS 가능한 경우 사용 STL 컨테이너/알고리즘 : 죄송합니다 내 나쁜 영어로.