Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define SIZEBUF 100//константа, определяющая масимальные размеры строк, которыми мы оперируем в программе
  4. #include <locale.h>
  5.  
  6. void var_str(char *input, char *output){//функция по варианту
  7. int i=0;
  8. int inword=0;
  9. int wordsize=0;
  10. char firstletter;
  11. int found=0; //нашли одинаковое начало и конец слова?
  12. while(input[i++]!='\0');//просто идём до конца строки
  13. int strsize=i;
  14. input[i-1]=' ';//в конце строки ставим пробел, чтобы ограничить последнее слово
  15.  
  16. for(i=0; i<SIZEBUF; i++)
  17. output[i]='\0';
  18.  
  19.  
  20.  
  21. i=0;//т.к. счётчик понадобится снова, зануляем его
  22.  
  23.  
  24. while(i<strsize){
  25. if(inword==1&&isspace(input[i])){//вышли из слова
  26. //printf("%c %c \n", firstletter, input[i-1]);
  27. if(firstletter==input[i-1]){
  28. found=1;
  29. break;
  30. }
  31. wordsize=0;
  32. inword=0;
  33. firstletter='\0';
  34. }
  35. if(inword==1&&!isspace(input[i])){//находимся в слова
  36. wordsize++;
  37. }
  38. if(inword==0&&!isspace(input[i])){//зашли в слово
  39. inword=1;
  40. wordsize=1;
  41. firstletter=input[i];
  42. }
  43.  
  44. i++;
  45. }
  46.  
  47. if(found){
  48. i=0;
  49. output[0]='!';
  50. while(i<strsize-1){
  51. output[i+1]=input[i];
  52. i++;
  53. }
  54. output[strsize+1]='\n';
  55.  
  56. }
  57. else{//не нашли одинакового начала и конца в словах строки, возвращаем исходную строку в качестве обработанной
  58. i=0;
  59. while(i<strsize-1){
  60. output[i]=input[i];
  61. i++;
  62. }
  63. output[strsize]='\n';
  64. }
  65.  
  66.  
  67.  
  68. }
  69. int main(){
  70. setlocale(LC_ALL, "");
  71. char input[SIZEBUF];//массив, в который считывается строки входного файла
  72. char in_file[SIZEBUF];
  73. char out_file[SIZEBUF];
  74. printf("Введите исходного файла: ");
  75. scanf("%s", in_file);//получаем название входного файла
  76. printf("Введите получаемого файла: ");
  77. scanf("%s", out_file);//получаем название выходного файла
  78.  
  79.  
  80. //printf("Введённая строка: %s\n", &input);
  81. FILE *pInputFile = fopen(in_file, "r"); //открываем входной файл на чтение (r-read)
  82. FILE *pOutputFile = fopen(out_file, "w");//открываем выходной файл на запись (w-write)
  83. int counter=0; //считаем, какая по порядку строка (меняем каждую третью, остальные переписываем без изменений)
  84. while(fgets(input, SIZEBUF, pInputFile) != NULL)//читаем строки, пока не наткнёмся на конец файла
  85. {
  86.  
  87.  
  88.  
  89. char output[SIZEBUF];//создаём массив, который передадим в функцию по варианту
  90. var_str(input, output);//как требовалось по заданию, передаём в функцию два указателя
  91. //...input - указатель на начало входной строки; output-на начало получаемой строки по варианту;
  92. fprintf(pOutputFile, "%s", output);//записываем преобразованную строку в выходной файл
  93.  
  94.  
  95.  
  96.  
  97.  
  98. }
  99.  
  100.  
  101.  
  102.  
  103. return EXIT_SUCCESS;//по завершению программы выдаём значение, символизирующее успешность выполнения программы
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement