Удаление строки с наибольшим количеством разных символов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, многие недели бьюсь над загадкой следующего задания: "Скопировать содержимое текстового файла, удалив строку с наибольшим кол-вом разных символов.". Совместив одну, другую, третью программы, а так же функции из библиотеки string.h я почти смог добиться результата, но не тут-то было. Невиданные ранее ошибки нанесли ответный удар. А потом ещё удар. И ещё. Сил нет, помогите пожалуйста. Логика моей программы: считываем файл, в нём в каждой строке считаем каждое первое появление каждого символа. Сумму этих появлений записываем в переменную. Если разных символов в строке получилось больше, чем в переменной, в которой мы храним это кол-во, значит в другую переменную записываем строчку. И так цикл проходит все строчки в файле, а потом выводит все строки, кроме той, в которой больше всего разных символов. Ну, я хотел бы, чтобы оно так работало. Но не работает.

Спасите.

Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. void main( )
  5. {
  6. FILE *f1,*f2,*f3;
  7. int ch;
  8. int st;
  9. int st2;
  10. int stmax = 0;
  11. char maxline[255];
  12. char str[50];
  13. if ((f1 = fopen("first.txt","r")) == NULL)
  14. {
  15. fprintf(stdout, "Error opening file first.txt");
  16. exit(1);
  17. }
  18. if ((f2 = fopen("second.txt","w")) == NULL)
  19. {
  20. fprintf(stdout, "Error opening file second.txt");
  21. exit(1);
  22. }
  23. if ((f3 = fopen("second.txt","r")) == NULL)
  24. {
  25. fprintf(stdout, "Error opening file second.txt");
  26. exit(1);
  27. }
  28. printf("Before:\n");
  29. while (feof(f1)==0)
  30. {
  31. st = fgets(str,sizeof(str),f1);
  32. int i;
  33. int count1;
  34. for (i = 0; i <strlen(st); ++i)
  35. {
  36. char * pch;
  37. int count2 = 0;
  38. pch=strchr(st,st[i]);
  39. if (pch != NULL)
  40. {
  41. if (count2 == 0)
  42. {
  43. count1 += 1;
  44. count2 += 1;
  45. }
  46. }
  47. }
  48. if (stmax < count1)
  49. {
  50. maxline = st;
  51. }
  52. fputs(st,f2);
  53. fputs(st,stdout);
  54. }
  55. fclose(f2);
  56. printf("\n");
  57. printf("\n");
  58. printf("After:\n");
  59. while (feof(f3)==0)
  60. {
  61. st2 = fgets(str,sizeof(str),f3);
  62. if (st2 == maxline)
  63. {
  64. }
  65. else
  66. {
  67. printf ("%s", st2);
  68. }
  69. }
  70. fclose(f1);
  71. fclose(f3);
  72. }

Решение задачи: «Удаление строки с наибольшим количеством разных символов»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.     FILE *fin, *fout;
  7.     int i, j, flag = 0, nc = 0, max = 0, ns = 1, str;//nc - счетчик неповторяющихся символов
  8.     char s[80];                                      //ns - счетчик строк
  9.     fin = fopen("input.txt", "r");
  10.     fout = fopen("output.txt", "w");
  11.     while(fgets(s, 80, fin)){
  12.         for(i = 0; i < strlen(s) - 2; i++){
  13.             for(j = 0; j < strlen(s) - 1; j++){
  14.                 if(s[i] == s[j] && i != j)//в цикле проверяем каждый элемент строки на повторяемость
  15.                     flag = 1;
  16.             }
  17.             if(flag == 0)//если символ не повторяется
  18.                 nc++;//счетчик увеличивается на 1
  19.             else
  20.                 flag = 0;
  21.         }
  22.         if(max < nc){//ищем максимальное кол-во неповторяемых символов
  23.             max = nc;
  24.             str = ns;//записываем в какой строке max
  25.         }
  26.         ns++;
  27.         nc = 0;
  28.     }
  29.     ns = 1;
  30.     fclose(fin);
  31.     fin = fopen("input.txt", "r");
  32.     while(fgets(s, 80, fin)){//повторно считываем исходный файл
  33.         if(ns != str)//и,за исключением строки с max,
  34.             fputs(s, fout);//печатаем его в выходной файл
  35.         ns++;
  36.     }
  37.     fclose(fin);
  38.     fclose(fout);
  39.     return 0;
  40. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы