Сортировка символов в строке по алфавиту в предложении - PullRequest
0 голосов
/ 25 января 2019

У меня проблема с сортировкой более чем одного слова и чувствительностью к регистру.

   #include <stdio.h>
   #include <string.h>
   #include <stdlib.h>

   int main() {
           char str[100], result[100], ch;
           int no[52] = {0}, n, c, t, x;
           printf("Enter a string: ");
           scanf("%[^\n]", str);
           n = strlen(str);

          //store how many times a-z characters appear in str
          for (c = 0; c < n; c++) {
          ch = str[c] - 'a';
          no[c]++;
          }
          t = 0;

          //insert the characters a-z in output which contains characters
          //in alphabetical order
          for (ch = 'a'; ch <= 'z'; ch++) {
                  x = ch - 'a';
                  for (c = 0; c < no[x]; c++) {
                          result[t] = ch;
                          t++;
                  }
          }
          result[t] = '\0';
          printf("%s\n", result);
          return 0;
  }

вывод: привет -> эхло


Что я ищу, так это вывод: Hello World From Ka -> eHllo dlorW Fmor aK


Существуют ли какие-либо библиотеки или функции, которые могут сделать это проще?

1 Ответ

0 голосов
/ 25 января 2019

Похоже, вы могли бы использовать два итератора (голову и хвост) и работать над каждым «словом» на месте, по одному за раз.

Ваш порядок сортировки «должен быть» без учета регистраи вы, кажется, имеете некоторый код, вычитающий «a» из каждого символа, чтобы перебазировать / сместить значение в вашем массиве.Однако я не вижу кода, который преобразует символы в верхнем регистре в их эквиваленты в нижнем регистре (что необходимо только для сортировки, исходя из ваших требований, вы все равно должны выводить исходный ввод символов в верхнем регистре).

Я не вижу причин для хранения в строке количества символов, возможно, которые могут быть удалены или уточнены.

Добро пожаловать в переполнение стека. Один из способовполучить улучшенные ответы и помочь с вашими вопросами, чтобы включить некоторые подробности о том, что вы пытаетесь сделать, а не только ваш код.Если вы должны включить код, чтобы сообщить о своей проблеме, рассмотрите возможность разбиения его на отдельные части.Это не только поможет нам понять, если у вас есть более одного вопроса (и сообщество сообщит вам об этом!), Но также поможет вам понять, как упростить ваши вопросы, чтобы получить лучшую помощь и быстрее :), как это написановместо этого может принадлежать сайту https://codereview.stackexchange.com/.Скорее всего, это не очень хорошие вопросы и ответы для StackOverflow, опять же, как есть.

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...