Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <ctype.h>
- #include <string.h>
- #include <locale.h>
- char *str_process(char *str, int *word_count);
- int main()
- {
- setlocale(LC_ALL, "RUSSIAN");
- FILE *in, *out;
- char *in_file_name = "C:\\test\\file.txt";
- char *out_file_name = "C:\\test\\outputlab11.txt";
- char *err_msg = "An error has occured";
- char str[1025], *ptr;
- int word_count = 0;
- if ((in = fopen(in_file_name, "rt")) == NULL) //Если входной файл не открылся для чтения
- {
- perror(err_msg);
- return -1;
- }
- if ((out = fopen(out_file_name, "wt")) == NULL) //Если выходной файл не создался для записи
- {
- fclose(in);
- perror(err_msg);
- return -1;
- }
- fseek(in, 0, SEEK_END); //Проверка файла на пустоту
- if (ftell(in) == 0)
- {
- printf("The file is empty");
- fclose(in);
- fclose(out);
- remove(out_file_name);
- return 0;
- }
- fseek(in, 0, SEEK_SET);
- while (1)
- {
- if (fgets(str, 1024, in) == NULL)
- {
- if (feof(in)) //Конец файла
- {
- fclose(in);
- fclose(out);
- break;
- }
- else //Ошибка
- {
- perror(err_msg);
- fclose(in);
- fclose(out);
- return -2;
- }
- }
- ptr = str_process(str, &word_count);
- fputs(ptr, out);
- }
- printf("Program finished successfully. Check %s for output.", out_file_name);
- return 0;
- }
- char *str_process(char *str, int *word_count)
- /*Функция удаляет нечётные слова,
- начинающиеся с заглавной буквы, меняет регистр остальных нечётных слов
- и увеличивает word_count на кол-во слов в строке до обработки*/
- {
- char result[1024] = { '\0' };
- char delim[] = " ,.;\t\n";
- char *ptr, *str_begin;
- char bad_str[1024];
- int word_length, space_length;
- int i;
- if (strlen(str) == 0) //Если пустая строка
- {
- return "";
- }
- str_begin = str; //Указатель на текущее начало строки
- strcpy(bad_str, str_begin);
- ptr = strtok(bad_str, delim);
- while (1)
- {
- if (ptr == NULL)
- {
- break;
- }
- str_begin = strstr(str, ptr) + strlen(ptr);
- *word_count += 1;
- if (*word_count % 2 == 0) //Если чётное слово
- {
- strcat(result, ptr);
- space_length = strspn(str_begin, delim);
- strncat(result, str_begin, space_length);
- }
- else //Если нечётное слово
- {
- if (!isupper((*ptr & 0xFF))) //Если начинается не с буквы верхнего регистра, поменять регистр каждой буквы
- {
- word_length = strlen(ptr);
- for (i = 0; i < word_length; i++)
- {
- if (isupper((ptr[i] & 0xFF)))
- {
- ptr[i] = tolower((ptr[i] & 0xFF));
- }
- else
- {
- ptr[i] = toupper((ptr[i] & 0xFF));
- }
- }
- strcat(result, ptr);
- space_length = strspn(str_begin, delim);
- strncat(result, str_begin, space_length);
- }
- }
- ptr = strtok(NULL, delim);
- }
- if (strchr(result, '\n') == NULL)
- {
- result[strlen(result)] = '\n';
- result[strlen(result) + 1] = '\0';
- }
- return result;
- }
Add Comment
Please, Sign In to add comment