Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- // отладочный вывод, иногда это удобно
- void print_word(const char* word, int n) {
- putc('\n', stderr);
- for (int i = 0; i < n; ++i) {
- fwrite(word + n * i, 1, n, stderr);
- putc('\n', stderr);
- }
- }
- void sort_strings(char* word, int n)
- {
- // Я не понял как оно работает. Но это можно написать короче
- //char *s1 = malloc(sizeof(char)*n);
- //char *s2 = malloc(sizeof(char)*n);
- //int mis = 1;
- //while (mis != 0)
- //{
- // printf("s1 = %s, s2 = %s, mis = %d\n", s1, s2, mis);
- // print_word(word, n);
- // mis = 0;
- // for (int i = 0; i < (n-1); i++)
- // {
- // for (int j = 0; j < n; j++)
- // {
- // *(s1+j) = *(word + i*n + j);
- // *(s2+j) = *(word + (i + 1)*n + j);
- // }
- // if (strcmp(s1, s2) > 0)
- // {
- // mis = mis + 1;
- // for (int j = 0; j < n; j++)
- // {
- // *(word + i*n + j) = *(s2+j);
- // *(word + (i + 1)*n + j) = *(s1+j);
- // }
- // }
- // }
- //}
- //free(s1);
- //free(s2);
- qsort(word, n, n, strcmp);
- }
- enum { MAX_STR_SIZE = 50 }; // Константы удобно объявлять отдельно
- int main()
- {
- char str[MAX_STR_SIZE];
- //int i = 0, j, n, k; // этих переменных здесь вообще не должно быть
- // можно писать так:
- // for (int i = 0; i < smth; ++i) - переменная int i внутри цикла
- // если указать ключ компиляции -std=c99
- // Это можно написать короче:
- //for (i = 0; i < MAX_STR_SIZE; i++)
- //{
- // s[i] = '>';
- //}
- //num = 0;
- memset(str, '>', MAX_STR_SIZE);
- // Это тоже
- //scanf("%c", &s[0]);
- //while (s[num] != '\n')
- //{
- // num++;
- // scanf("%c", &s[num]);
- //}
- fgets(str, MAX_STR_SIZE, stdin);
- int str_size = strlen(str);
- //num = num; // ЛОЛШТО?
- printf("%d\n", str_size);
- str[str_size - 1] = '~';
- //n = num+1; // str_size == num + 1
- // И это
- //for (int i = 0; i < str_size; i++)
- //{
- // printf("%c", s[i]);
- //}
- //printf("\n");
- printf("%s\n", str);
- char* word = malloc(sizeof(char) * str_size * str_size); // sizeof(char) == 1 всегда
- // По-хорошему, нужно выделять (str_size + 1) * str_size памяти, чтобы в конец каждой строки
- // можно было дописать нуль-символ. Это позволит использовать стандартные функции
- // (например, strcmp), не боясь выйти за пределы массива. Ну или можно заменять '\n' на '\0', а
- // не на '~', будет то же самое.
- // (сейчас strcmp используется не совсем корректно, если входная строка состоит только
- // из символов '~', программа может упасть (а может и не упасть, это как повезёт))
- for (int i = 0; i < str_size; i++)
- {
- for (int j = i; j < str_size; j++)
- {
- *(word + str_size*i + j) = str[j - i];
- }
- for (int k = 0; k < i; k++)
- {
- *(word + str_size*i + k) = str[str_size - i + k];
- }
- }
- print_word(word, str_size); // посмотрим, как оно выглядело до сортировки
- sort_strings(word, str_size);
- print_word(word, str_size); // и после
- //char* preob = malloc(sizeof(char)*n);
- char* encoded_str = malloc(sizeof(char) * str_size);
- for (int i = 0; i < str_size; i++)
- {
- //*(preob + i) = *(word + i*n + (n - 1));
- encoded_str[i] = word[i*str_size + (str_size - 1)]; // так[] тоже можно
- //printf("%c", *(preob + i));
- }
- printf("\n%s\n", encoded_str);
- //printf("\n");
- free(encoded_str);
- free(word);
- // system("Pause"); //вингую, что это Windows-специфичная дичь
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement