Поиск ошибок в тексте (не срабатывает код) - C (СИ)
Формулировка задачи:
Помогите найти ошибку в коде (не срабатывает условие if(ptr[z-ptr-1]!='-') ). Задание звучит так: Найти в веденном тексте не правильное написание частиц "-то, -либо, -нибудь", т.е БЕЗ "-"
#include "stdafx.h" #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <locale.h> #include <ctype.h> #include <string.h> #include <windows.h> using namespace std; #define size 1024 int main(){ SetConsoleOutputCP(1251); SetConsoleCP(1251); char* vse[]={"то","либо","нибудь"}; char buffer[size]; char symbol[size]; cout<<"Введите текст\n"; fgets( buffer, 1024, stdin ); //cout<<"Введите текст"; //gets( symbol); char *ptr = strtok(buffer, " ,."); size_t count=0; char* z=NULL; while(ptr!=NULL) { z=NULL; int i; for (i=0;i<3;i++) { z=NULL; z=strstr(ptr,vse[i]); if(z>ptr) { if(ptr[z-ptr-1]!='-') size_t count=0; ++count; } } ptr = strtok(NULL, " ,."); } cout<<"Ошибки встречаются: "<<count<<std::endl; getch(); return 0; }
Решение задачи: «Поиск ошибок в тексте (не срабатывает код)»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdbool.h> #include <windows.h> #define DELIM " ,.!?\n\t" bool is_correct(const char* word) { static const char* PARTS[] = {"то", "либо", "нибудь", NULL}; if (strlen(word) < 3) return true; for (size_t i = 0; PARTS[i]; i++) { char* ptr = strstr(word, PARTS[i]); if ( ptr && !(*(ptr + strlen(PARTS[i]))) && (*(ptr-1) != '-')) return false; } return true; } int main(void) { SetConsoleOutputCP(1251); SetConsoleCP(1251); char buf[BUFSIZ]; while (printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf!='\n') for (char* ptr = strtok(buf, DELIM); ptr; ptr=strtok(NULL, DELIM)) if (!is_correct(ptr)) puts(ptr); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью, строками и консолью.
- Определяем разделитель для разделения входной строки на слова.
- Создаем функцию is_correct, которая проверяет корректность слова по заданным частям речи.
- В функции is_correct используется статический массив PARTS, который содержит возможные части речи.
- Если длина слова меньше 3 символов, функция возвращает true.
- В противном случае, происходит поиск каждого элемента массива PARTS в слове.
- Если элемент найден и после него есть символ, не являющийся пробелом или дефисом, функция возвращает false.
- В функции main устанавливаем кодировку консоли для работы с русским языком.
- Создаем буфер для чтения строки из консоли.
- В цикле запрашиваем строку у пользователя и проверяем каждое слово на корректность с помощью функции is_correct.
- Если слово некорректно, выводим его на экран.
- Цикл продолжается до тех пор, пока пользователь не введет пустую строку.
- В конце программы возвращаем 0, чтобы указать на успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д