Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <locale.h>
- #include <stdlib.h>
- #include <windows.h>
- struct word{
- int count;
- char *word;
- };
- int readInputString(char* str){
- printf("%s\n", "Введите строку: ");
- gets(str);
- int buf = 0;
- for (int i = 0; i < strlen(str); i++)
- if(str[i] == ' ')
- buf++;
- ++buf;
- return buf;
- }
- void createArrayOfStrings(char* strings[], char * str, int arrayOfStringsSize){
- int stringSize = 0;
- for(int i = 0; i < arrayOfStringsSize; i++){
- strings[i] = malloc(0);
- for (int j = 0; (str[stringSize] != ' ') && (str[stringSize] != '\0');){
- if(((str[stringSize] > 64) && (str[stringSize] < 91)) || ((str[stringSize] > 96) && (str[stringSize] < 123))){
- strings[i][j] = str[stringSize];
- j++;
- }
- ++stringSize;
- }
- ++stringSize;
- }
- free(str);
- }
- int createArrayOfWords(int arrayOfStringsSize, char* strings[], int size){
- for(int i = 0; i < arrayOfStringsSize; i++) {
- if (strcmp(strings[i], strings[arrayOfStringsSize-1]) != 0)
- size++;
- }
- return size;
- }
- void writeArrayOfWords(int arrayOfStringsSize, char* strings[], struct word *words, int *min){
- int count;
- char buf;
- for(int i = 0; i < arrayOfStringsSize; i++) {
- count = 1;
- if (strcmp(strings[i], strings[arrayOfStringsSize-1]) != 0){
- buf = strings[i][0];
- if(strings[i][0] > 90) {
- strings[i][0] = strings[i][0] - 32;
- }
- for(int j = 1; j < strlen(strings[i]); ++j) {
- if (strings[i][j] > 90) {
- if (strings[i][j - 1] < (strings[i][j] - 32))
- count++;
- } else {
- if (strings[i][j - 1] < strings[i][j])
- count++;
- }
- }
- strings[i][0] = buf;
- if (count < *min)
- *min = count;
- words[i].word = malloc(0);
- strcpy(words[i].word, strings[i]);
- words[i].count = count;
- }
- }
- free(strings);
- }
- void printWordsReplacementTask(int arrayOfStringsSize, char* strings[]){
- char setOfConsonants[21] = "bdfghjklmnpqrstvwxyz";
- if(arrayOfStringsSize == 1)
- puts("Строка состоит из одного слова! Оно и есть последнее!");
- for(int i = 0; i < arrayOfStringsSize; i++) {
- if (strcmp(strings[i], strings[arrayOfStringsSize-1]) != 0){
- if(strlen(strings[i]) % 2 != 0)
- for(int j = 0; j < strlen(strings[i]); ++j){
- for(int k = 0; k < 21; ++k)
- if(strings[i][j] == setOfConsonants[k]) {
- strings[i][j] -= 32;
- break;
- }
- }
- puts(strings[i]);
- }
- }
- free(strings);
- }
- void printWordsAlphabetTask(int arrayOfStringsSize, char* strings[]){
- int size = 0;
- int min = 2000000000;
- size = createArrayOfWords(arrayOfStringsSize, strings, size);
- struct word words[size];
- writeArrayOfWords(arrayOfStringsSize, strings, words, &min);
- if(arrayOfStringsSize == 1)
- puts("Строка состоит из одного слова! Оно и есть последнее!");
- for (int i = 0; i < size; i++) //вывели слова
- if(words[i].count == min)
- puts(words[i].word);
- }
- int readNumOfTask(){
- int num;
- int bool;
- char* inputLine = malloc(0);
- do{
- puts("Введите номер задачи(1 - задача с упорядочиванием по алфавиту, либо 2 - задача с заменой букв): ");
- bool = 0;
- gets(inputLine);
- num = atoi(inputLine);
- if(num == 0){
- bool = 1;
- puts("Введите число! 1 или 2.");
- }
- if (!bool && (((num < 1) || (num > 2)))){
- puts("Введите число! 1 или 2.");
- bool = 1;
- }
- } while (bool);
- return num;
- }
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- setlocale(LC_ALL, "Rus");
- int arrayOfStringsSize;
- char* str = malloc(0);
- arrayOfStringsSize = readInputString(str);
- char* strings[arrayOfStringsSize];
- createArrayOfStrings(strings, str, arrayOfStringsSize);
- int choise = readNumOfTask();
- switch(choise){
- case 1:
- printWordsAlphabetTask(arrayOfStringsSize, strings);
- break;
- case 2:
- printWordsReplacementTask(arrayOfStringsSize, strings);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement