多维数组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] = {''};
  int integers[MAX_CHARS] = {''};
  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;
}

问题出现在函数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;
}

但我建议你遵循Jack的建议:尽可能/尽可能使用STL容器/算法

抱歉我英语不好。

相关内容

  • 没有找到相关文章

最新更新