Как записать предложение в массив строк - C (СИ)
Формулировка задачи:
в файле должно быть например:
qwrqr! qwrewqr.
etet.
etwtq. qasfas.
#include<conio.h> #include<stdio.h> #include<string.h> int main() {int m=0; int i=0, j, n=0, tochka=0; FILE *fp; char string[255][255], str[255]; int c; if((fp=fopen("2.txt", "r"))!=NULL) { for (;c!=EOF; ) { c=fgetc(fp); if(c=='\n') n++;//количество \n else { str[i]=c; i++; if((c=='.') || (c=='!') || (c=='?')) tochka++; } } } fclose(fp); printf("%d", n); printf("\n%s", str); printf("\nkol . %d", tochka); //до этого момента все хорошо int len=strlen(str); printf("\nLEN = %d\n", len); i=0; int len2=0; for(j=0; j<len; j++)// кажись тут где сбой, но вроде все логично { if((str[j]=='.') || (str[j]=='!') || (str[j]=='?')) { string[i][j]=str[j]; i++; } else string[i][j]=str[j]; } for(i=0; i<tochka; i++)//tochka это сколько предложений в файле { len2=strlen(string[i]);//узнаю сколько элементов в рассматриваемой строке { for(j=0; j<len2; j++)//по этой строке пробегаюсь { printf("%s", string[i][j]); } } } }
Решение задачи: «Как записать предложение в массив строк»
textual
Листинг программы
// в файле // qwrqr! qwrewqr. // etet. // etwtq. qasfas. #include<conio.h> #include<stdio.h> #include<string.h> int main() { int m=0; int i=0, j, n=0, tochka=0; FILE *fp; char string[255][255], str[255]; int c = '\0'; if((fp=fopen("1.txt", "r"))!=NULL) { for (;c!=EOF; ) { c=fgetc(fp); if(c=='\n') n++;//количество \n else { str[i]=c; i++; if((c=='.') || (c=='!') || (c=='?')) tochka++; } } str[i - 1] = '\0'; } fclose(fp); printf("%d", n); printf("\n%s", str); printf("\nkol . %d", tochka); //до этого момента все хорошо int len=strlen(str); printf("\nLEN = %d\n", len); i=0; int k; int len2=0; for(j=0, k = 0; j<len; j++)// кажись тут где сбой, но вроде все логично { if((str[j]=='.') || (str[j]=='!') || (str[j]=='?')) { string[i][k]=str[j]; string[i][k + 1] = '\0'; i++; if (i == tochka) break; k = 0; } else { string[i][k]=str[j]; ++k; } } for(i=0; i<tochka; i++)//tochka это сколько предложений в файле { printf("%s", string[i]); printf("\n"); //len2=strlen(string[i]);//узнаю сколько элементов в рассматриваемой строке //{ // for(j=0; j<len2; j++)//по этой строке пробегаюсь // { // printf("%c", string[i][j]); // } // printf("\n"); //} } }
Объяснение кода листинга программы
В этом коде задачей является запись предложений из файла в массив строк. Вот список действий, которые происходят в коде:
- В начале кода объявляются переменные:
- m - счетчик для прохода по предложениям в файле
- i, j, n, tochka - счетчики для прохода по строкам и символам в строке
- fp - указатель на файл
- str - строка, в которой проверяется каждый символ
- c - текущий символ из файла
- string - массив строк, в который записываются предложения
- len, len2 - счетчики для определения длины строки
- k - дополнительный счетчик для пробежки по строке
- Открывается файл
1.txt
для чтения. - Начинается цикл, который читает символы из файла до конца строки (до символа новой строки).
- Если текущий символ является точкой, восклицательным знаком или вопросительным знаком, увеличивается счетчик tochka.
- Если текущий символ не является точкой, восклицательным знаком, вопросительным знаком или пробелом, он записывается в массив str.
- После завершения чтения строки, последнему символу в строке присваивается нулевой символ.
- После завершения чтения файла, закрывается файл.
- Выводится количество предложений в файле (значение переменной n).
- Выводится первое предложение из файла (значение переменной str).
- Выводится количество предложений в файле (значение переменной tochka).
- Вычисляется длина строки str (значение переменной len).
- Начинается цикл, который пробегается по каждому предложению в массиве string.
- Каждое предложение выводится на экран.
- Для каждого предложения вычисляется его длина (значение переменной len2).
- Для каждого символа в предложении выводится его значение. Ошибка в коде заключается в том, что в цикле, который записывает предложения в массив string, не учитывается, что предложение может заканчиваться не только точкой, восклицательным знаком или вопросительным знаком, но и пробелом. Это приводит к тому, что весь текст после последнего символа, который является точкой, восклицательным знаком или вопросительным знаком, записывается в следующую строку массива, как одно предложение, вместо того, чтобы быть разделенным на отдельные предложения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д