Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <locale.h>
- char *readSentence();
- char **readText(char **Text, int *Count_sentence);
- char **DeleteAnalogousSentence(char **Text, int *Count_sentence);
- char **DeleteNumbers(char **Text, int *Count_sentence);
- void OutputisPalindrome(char **Text, int *Count_sentence);
- char **DeleteSentence(char **Text, int *Count_sentence);
- char **SortbyLengthoftheThirdWord(char **Text, int *Count_sentence);
- void printText(char** Text, int *Count_sentence);
- int main(){
- setlocale(LC_ALL,"");
- char** Text = (char**)malloc(sizeof(char*));
- int Count_sentence = 0;
- Text = readText(Text, &Count_sentence);
- Text = DeleteAnalogousSentence(Text, &Count_sentence);
- int choise;
- do{
- wprintf(L"Выбор функции:\nЧтобы удалить все встречающиеся в предложениях цифры, нажмите 1\nЧтобы найти предложения-палиндромы, нажмите 2\nЧтобы удалить все предложения, в которых совпадает первый и последний символ(без учета регистра), нажмите 3\nЧтобы отсортировать предложения по увеличению длины третьего слова, нажмите 4\nЧтобы выйти из программы, нажмите 0\n");
- scanf("%d",&choise);
- switch(choise){
- case 1:
- Text = DeleteNumbers(Text, &Count_sentence);
- printText(Text, &Count_sentence);
- break;
- case 2:
- OutputisPalindrome(Text, &Count_sentence);
- break;
- case 3:
- Text = DeleteSentence(Text, &Count_sentence);
- printText(Text, &Count_sentence);
- break;
- case 4:
- Text = SortbyLengthoftheThirdWord(Text, &Count_sentence);
- printText(Text,&Count_sentence);
- break;
- case 0:
- printf("Goodbye!");
- break;
- default:
- wprintf(L"Данные некорректны");
- }
- }while(choise != 0);
- for (int i = 0; i < Count_sentence; i++){
- free(Text[i]);
- }
- free(Text);
- return 0;
- }
- char **readText(char **Text,int *Count_sentence){
- int size = 10; //память в Text
- char *sentence;
- do{
- sentence = readSentence();
- if (*Count_sentence == size - 3){
- size += 10;
- Text = realloc(Text, size * sizeof(char*));
- }
- Text[*Count_sentence] = sentence;
- (*Count_sentence)++;
- }while(strcmp(sentence,"End!"));
- return Text;
- }
- char *readSentence(){
- char *sentence = malloc(10*sizeof(char));
- char current_symbol;
- int Count_symbol = 0; //символ в предложении
- int size_sentence = 10; //память в предложении
- do{
- current_symbol = getchar();
- if ((current_symbol == ' ' || current_symbol == '\t') && !Count_symbol){
- current_symbol = getchar();
- }
- if (Count_symbol == size_sentence - 3 ){
- size_sentence += 10;
- sentence = realloc(sentence,size_sentence*sizeof(char));
- }
- sentence[Count_symbol] = current_symbol;
- Count_symbol++;
- }while ((current_symbol != '\n')&&(current_symbol != '.')&&(current_symbol !='!'));
- sentence[Count_symbol] = '\0';
- return sentence;
- }
- char **DeleteAnalogousSentence(char **Text, int *Count_sentence){
- int k = 1, n;
- for(int i = 0; i < *Count_sentence - 1; i++){
- for(int j = i+1; j < *Count_sentence; j++){
- if (strlen(Text[i]) == strlen(Text[j])){
- for (int m = 0; m < strlen(Text[i]); m++){
- if (toupper(Text[i][m]) != toupper(Text[j][m])){
- k = 0;
- break;
- }
- }
- if (k == 1){
- char *sent = Text[j];
- for(n = j; n < *Count_sentence; n++){
- Text[n]=Text[n+1];
- }
- (*Count_sentence)--;
- free(sent);
- j--;
- }
- }
- }
- }
- return Text;
- }
- char **DeleteNumbers(char **Text, int *Count_sentence){
- int i = 0;
- char space;
- while (i < *Count_sentence){
- for (int j = 0; j < strlen(Text[i]); j++){
- if (isdigit(Text[i][j])){
- if (j !=0)
- space = Text[i][j-1];
- if (Text[i][j+1] == ' ' && (space == ' ' || j == 0))
- for (int s = j; s < strlen(Text[i])-1; s++){
- Text[i][s] = Text[i][s+2];
- }
- else
- {
- for (int s = j; s < strlen(Text[i]); s++){
- Text[i][s] = Text[i][s+1];
- }
- }
- j--;
- }
- }
- for (int j = 0; j < strlen(Text[i])-1; j++){
- if (Text[i][j] == ' ' && (Text[i][j+1] == ' ' || Text[i][j+1] == ',' || Text[i][j+1] == '.'))
- for (int s = j; s < strlen(Text[i]); s++){
- Text[i][s] = Text[i][s+1];
- }
- if (Text[i][0] == ',' && Text[i][1] == ' ')
- for (int s = j; s < strlen(Text[i])-1; s++){
- Text[i][s] = Text[i][s+2];
- }
- }
- if (Text[i][strlen(Text[i])-2] == ',' && Text[i][strlen(Text[i])-1] == '.'){
- Text[i][strlen(Text[i])-2] = '.';
- Text[i][strlen(Text[i])-1] = '\0';
- }
- if (strlen(Text[i]) == 1){
- int sen;
- char *sent = Text[i];
- for (sen = i; sen < *Count_sentence - 1; sen++){
- Text[sen] = Text[sen+1];
- }
- free(sent);
- (*Count_sentence)--;
- }
- else{
- i++;
- }
- }
- return Text;
- }
- void OutputisPalindrome(char **Text, int *Count_sentence){
- int i = 0;
- while (i < *Count_sentence){
- int end = strlen(Text[i]) - 2;
- int start = 0;
- while (start != end){
- if (Text[i][start] == ' ')
- start++;
- if(Text[i][end] == ' '){
- end--;
- if (Text[i][end] == ',')
- end--;
- }
- if (Text[i][start] == ',')
- start += 2;
- if (Text[i][start] == Text[i][end]){
- start++;
- end--;
- }
- else{
- printf("%s - Nothing interesting\n", Text[i]);
- break;
- }
- if (start >= end){
- printf("%s - Palindrome\n", Text[i]);
- break;
- }
- }
- i++;
- }
- }
- char **DeleteSentence(char **Text, int *Count_sentence){
- int i = 0;
- int s;
- char *sentence;
- while (i < *Count_sentence){
- int j = strlen(Text[i]) - 2;
- if (tolower(Text[i][0])==tolower(Text[i][j])){
- sentence = Text[i];
- for (s = i; s < *Count_sentence - 1; s++){
- Text[s] = Text[s+1];
- }
- free(sentence);
- (*Count_sentence)--;
- }
- else{
- i++;
- }
- }
- return Text;
- }
- int compare (const void *i, const void *j){
- const char *Firstsentence = *(char**)i;
- const char *Secondsentence = *(char**)j;
- int lenThirdWorld_i = 3;
- int lenThirdWorld_j = 3;
- int numSpace = 0;
- for (int k = 0; k < strlen(Firstsentence); k++){
- if (Firstsentence[k] == ' '){
- numSpace += 1;
- }
- if (numSpace == 2){
- int s = k + 1;
- lenThirdWorld_i = 0;
- while (Firstsentence[s] != ' ' && Firstsentence[s] != ',' && Firstsentence[s] != '.'){
- lenThirdWorld_i += 1;
- s++;
- }
- break;
- }
- }
- numSpace = 0;
- for (int k = 0; k < strlen(Secondsentence); k++){
- if (Secondsentence[k] == ' '){
- numSpace += 1;
- }
- if (numSpace == 2){
- int s = k + 1;
- lenThirdWorld_j = 0;
- while (Secondsentence[s] != ' ' && Secondsentence[s] != ',' && Secondsentence[s] != '.'){
- lenThirdWorld_j += 1;
- s++;
- }
- break;
- }
- }
- if(lenThirdWorld_i > lenThirdWorld_j)
- return 1;
- else if (lenThirdWorld_i == lenThirdWorld_j)
- return 0;
- else
- return -1;
- }
- char **SortbyLengthoftheThirdWord(char **Text, int *Count_sentence){
- qsort(Text, (*Count_sentence)-1, sizeof (char*), compare);
- return Text;
- }
- void printText(char** Text, int *Count_sentence){
- for (int i = 0; i < *Count_sentence; i++)
- printf("%s ",Text[i]);
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement