Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2018, 16:05   #1
StillNoob
Пользователь
 
Регистрация: 27.03.2018
Сообщений: 21
По умолчанию В символьной строке удалить все слова, которые содержат буквы, не входящие в разрешенный набор символов.

Задание:В символьной строке удалить все слова, которые содержат буквы, не входящие в
разрешенный набор символов.
разрешённый набор: 'a' , 'A' , 'H' ,'h' , 'c'.
ограничения:слово-это только буквы, в нём не должно быть цифр и др. символов кроме букв.
я не знаю какое условие использовать для ограничения, написал что разделители всё кроме слов и поставить вместо них пробел,но что-то не выходит.
подскажите в чём ошибка или как сделать иначе,спасибо.
Код:
#include <stdio.h>
#include <stdlib.h>
// определение символических констант 
#define YES 1 
#define NO 0 
#define MAXLINE 1000 
int main() 
{ 
    char line[MAXLINE];   
    char *line_ptr; // указатель на текущий символ буфера
	char *end; // указатель на конец слова
	char *begin; // указатель на начало слова
	char c; // текущий символ
	int flag; // признак слова
	int found; // признак того, что запрещённые буквы присутстувют в слове
	char *src;
    char *dst;
	flag = NO; 
	found = NO; 
	line_ptr = line;
	begin = line;
	end = line;
	printf("String:");
    if ( !fgets(line, sizeof(line), stdin) ) // прочитать строку, если неудачно - выход с ошибкой 
            exit(1);
    if ( *line == '\n' ) //если строка пустая - на выход 
            exit(0);
// цикл чтения символов из строки
	do 
	{ 
     c = *line_ptr; // взять текущий символ из массива
     if ( (c<'a' || c>'z') && (c<'A' || c>'Z') ) //проверка на разделители 
	{ 
		*line_ptr=' ';//т.к. нам не нужны лишние символы заменяем их на пробел
          if( flag == YES ) 
         { 
			 // найден разделитель
               end = line_ptr - 1; // запомнить указатель на конец слова
               if( found == YES ) 
                 { //найдены запрещённые буквы слово нужно удалить
							*src = *end + 1;
							*dst = *begin;
							while( (*dst++ = *src++ ) != '\0' );//удаление слова

							line_ptr = begin; // начать обработку строки сперенесённого фрагмента							
                  } 
          } 
          flag = NO; 
     } 
	 else 
           { //найдена буква
             if( flag == NO ) 
				begin = line_ptr; // запомнить указатель на начало слова
             if( c != 'a' && c != 'A' && c != 'H' && c != 'h' && c != 'c' ) //проверка на наличие разрешённых букв в слове
			  {
				found = YES;
				flag = YES; 
			  }
			 else
				 found=NO;
             } 
    line_ptr++; // продвинуть вперёд указатель на текущий символ
     } 
	while( c != '\0' ); 
	printf("Result: ");
	puts(line);
	return 0;
}
StillNoob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На C++ Дана последовательность символов. Выяснить, имеются ли в последовательности все буквы, входящие в слово "тина" LLlystr1zty Помощь студентам 0 21.12.2016 22:11
Найдите все слова в предложении, которые содержат только заданные буквы. Для определения буквенного состава используйте процедуру. avizer Помощь студентам 3 27.03.2012 21:07
Дан текст. Слова в тексте отделены одним пробелом, в конце текста точка. Распечатать все слова текста, которые содержат..... Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 1 06.02.2012 23:36
Переписать в новый файл все слова, которые содержат только буквы латин.алф. volchica Паскаль, Turbo Pascal, PascalABC.NET 3 18.02.2011 16:22
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47