Форум программистов, компьютерный форум CyberForum.ru

Вывести на экран все слова предложения, содержащие в качестве подстроки слово w - C++

Восстановить пароль Регистрация
 
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
20.12.2010, 22:46     Вывести на экран все слова предложения, содержащие в качестве подстроки слово w #1
В строках вообще чёт понять не могу(( пожалуйста объясните хотя алгоритм как делать по подробнее!(( вот задание:
С клавиатуры вводится строка символов, представляющая собой предложение со знаками препинания (точка, запятая, восклицательный знак), а также слово w. Вывести на экран все слова данного предложения, содержащие в качестве подстроки слово w.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2010, 22:46     Вывести на экран все слова предложения, содержащие в качестве подстроки слово w
Посмотрите здесь:

Считать текст из файла и вывести на экран только предложения, содержащие введенное с клавиатуры слово C++
Из текстового файла неизвестного размера вывести на экран все предложения, не содержащие запятых C++
C++ Cчитать текст и вывести на экран только предложения, содержащие введенное с клавиатуры слово.
[C++] вывести на экран все слова, содержащие букву k C++
C++ Списки и файлы. Вывести на экран только предложения, содержащие слово которое ввели с клавиатуры (найти ошибку в коде)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BrumbleHorse
 Аватар для BrumbleHorse
120 / 120 / 11
Регистрация: 18.09.2010
Сообщений: 212
20.12.2010, 23:31     Вывести на экран все слова предложения, содержащие в качестве подстроки слово w #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define MAX 100
#define W 15
void str_copy(char* target,char* src)
{
  char* _p;
  for ( _p = target; *_p; ++_p );
  while ( *_p++ = *src++ );
}
void str_delete(const char* str,const char* delim,const char* word_w)
{
     char new_line[MAX]={};
     char* buf, * p, *pp;
     const char* word;
     const char* spc=" ";
     buf = strdup(str);
     word=new_line;
     pp=new_line;
     for(p=strtok(buf,delim);p;p=strtok(NULL,delim))
     {
       if(strstr(p,word_w))
       {
           str_copy(pp,p);
           str_copy(pp,spc);
       }
 
     }
    printf("Here is words that contain 'w' word:\n");
    printf("%s", word);
    free(buf);
}
void main()
 {   char line[MAX]={};
     char w[W]={};
     const char* w_border=" !,";
     const char* p_line=line;
     const char* p_w=w;
     printf("Please input your string:\n");
     gets(line);
     printf("Please input your w:\n");
     gets(w);
     str_delete(p_line,w_border,p_w);
     getch();
 }
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
26.12.2010, 21:14  [ТС]     Вывести на экран все слова предложения, содержащие в качестве подстроки слово w #3
не могли бы пожалуйста прокомментировать код! не особо понимаю как всё работает! но работает правильно!

Добавлено через 1 час 41 минуту
Ну кто нить плиз расскажите как программа работает?
BrumbleHorse
 Аватар для BrumbleHorse
120 / 120 / 11
Регистрация: 18.09.2010
Сообщений: 212
26.12.2010, 22:52     Вывести на экран все слова предложения, содержащие в качестве подстроки слово w #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define MAX 100
#define W 15
void str_copy(char* target,char* src)/*функция копирует строку src в строку target*/
{
  char* _p;
  for ( _p = target; *_p; ++_p );
  while ( *_p++ = *src++ );
}
void str_delete(const char* str,const char* delim,const char* word_w)/*функция,выполняющая задание*/
{/*получает в качестве аргументов строку,введенную пользователем,введенное слово w и delim - набор разделителей слова*/
     char new_line[MAX]={};
     char* buf, * p, *pp;
     const char* word;
     const char* spc=" ";/*создаем пробел, чтобы вставлять его при создании итоговой строки*/
     buf = strdup(str);/*делаем копию введенной пользователем строки,чтобы поработать с ней*/
     word=new_line;
     pp=new_line;
     for(p=strtok(buf,delim);p;p=strtok(NULL,delim))/*strtok делит строку на лексемы(слова)*/
     {/*за один проход цикла работаем с очередным словом*/
       if(strstr(p,word_w))/*если слово содержит в себе слово w,то копируем его в итоговую строку*/
       {
           str_copy(pp,p);
           str_copy(pp,spc);/*после него копируем в итоговую строку пробел*/
       }
 
     }
    printf("Here is words that contain 'w' word:\n");
    printf("%s", word);/*выводим итоговую строку -результат*/
    free(buf);/*освобождаем память*/
}
void main()
 {   char line[MAX]={};
     char w[W]={};
     const char* w_border=" !,";
     const char* p_line=line;
     const char* p_w=w;
     printf("Please input your string:\n");
     gets(line);
     printf("Please input your w:\n");
     gets(w);
     str_delete(p_line,w_border,p_w);
     getch();
 }
Yandex
Объявления
26.12.2010, 22:52     Вывести на экран все слова предложения, содержащие в качестве подстроки слово w
Ответ Создать тему
Опции темы

Текущее время: 22:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru