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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
#1

Строки : проверка на вхождение слова - C++

26.11.2009, 12:58. Просмотров 1609. Ответов 3
Метки нет (Все метки)

Доброе время суток. Прошу помочь посмотреть где я не так что сделал в такой задаче :
Дана строка, содержащая слова, разделенные одним или несколькими разделительными символами (пробелами, табуляторами), в начале строки и в конце строки также могут находиться разделительные символы. Сформировать новую строку на основе исходной строки, из которой удалены слова, встречающиеся в исходной строке только один раз. Оставшиеся слова разделяются одним пробелом. В начале строки и в конце строки не должно быть разделительных символов.

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
47
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
 
void DeleteSymbols(char* str)
{
        int i;
        for(i=0;str[i+1]!=0;i++)
        {
                str[i]=str[i+1];
        }
        str[i]=0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
        char strIn[255],strOut[255],strBuf[255],strBuf2[255];
        for(;;)
        {
                strOut[0]=0;
                printf("Vvedite stroku\n");
                gets(strIn);
         strcpy(strBuf2,strIn);     // <<<---
                if(strIn[0] == '0' && strIn[1] == 0) break;
                while(strIn[0]!=0)
                {
                        strBuf[0]=0;
                        for(;strIn[0]==' ' || strIn[0]=='\t'; DeleteSymbols(strIn));
                        strncpy( strBuf,strIn,strcspn(strIn," \t"));
                        strBuf[strcspn(strIn," \t")] = 0;
                        for(;!strspn(strIn," \t") && strIn[0]!=0;)
                                DeleteSymbols(strIn);
                                for (;strBuf2[0]==' ';DeleteSymbols(strBuf));  //  <<<----
              while(strBuf2[0]!=0)                              
                 {
                                          if (strstr(strBuf2,strBuf)==0)
                {
                                           strcat(strOut," ");
                                                  strcat(strOut,strBuf);
                 }
                        }                                                    //<<<---                                        
                       
                }
                printf("StrOut = %s\n",strOut);
        }
        return 0;
}
В цикле обозначенном стрелками прошу проверить на правильность написания. Хотел реализовать цикл на проверку вхождения этого слова. Вот на примере :
исходную строку копирую в strBuf2. вот например сама строка :
aa bbb cc bbb d
потом я в strBuf записываю первое слово : аа и удаляю его и исходной строки
и в цикле проверяю на вхождение из оставшейся строки :
bbb cc bbb d
если это слово не встретилось, то записываю его в результат

Вот как раз и возникла проблема с циклом, т.к. при запуске просто повисает (вроде бесконечный цикл или как то так)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2009, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки : проверка на вхождение слова (C++):

Некорректная проверка числа на вхождение в диапазон - C++
Имеется программа, где нужно ввести в начале число от 1 до 40. #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; ...

Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3 - C++
Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3.

Определить вхождение слова в строку - C++
Всем доброго времени суток. Нужно написать на С++ программу,которая при вводе команды выполняет определённые действия. Мой код: while...

Удалить из текста повторное вхождение слова - C++
Дан символьный массив, образованный из слов, разделенных пробелами. С использованием процедур и функций выполнить: o Удалить из текста...

Найти первое вхождение слова в текст - C++
Здравствуйте, помогите пожалуйста написать 2 программы, связанные со строками: 1)Даны две строки, которые назовём текст и слово, а...

Посчитать вхождение каждого слова в строку - C++
Вынужден просить вашей помощи: необходимо написать программу, которая бы считала вхождение каждого слова в строку (сколько раз встречается...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
denbessonov
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 14
26.11.2009, 14:01 #2
Цитата Сообщение от Dipso Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
              while(strBuf2[0]!=0)                              
                 {
                                          if (strstr(strBuf2,strBuf)==0)
                {
                                           strcat(strOut," ");
                                                  strcat(strOut,strBuf);
                 }
                        }                                                    //<<<---                                        
}
Я особо не разбирался с логикой, но если Вы не меняете strBuf2[0], цикл никогда и не кончится.
0
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
26.11.2009, 15:21  [ТС] #3
Добавил в начало цикл на сам Buf2, и вот действительно загвозкак как сокращать сам Buf2, думаю его надо в цикле for сделать, терь думаю как запихнуть туда )
А за счет того что добавил в начало while терь проходит цикл, но в результат ничего не записывает.

C++
1
2
3
4
5
6
7
8
9
10
while(strBuf2[0]!=0)
   for (;strBuf2[0]==' ';DeleteSymbols(strBuf))  //<<<----
      while(strBuf2[0]!=0)
      {
            if (strstr(strBuf2,strBuf)==1)
               {
             strcat(strOut," ");
                    strcat(strOut,strBuf);
        }
       }
0
denbessonov
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 14
26.11.2009, 20:07 #4
Не, так программы не пишут.
Надо сесть и внимательно на листочке продумать, что и как.
Пока это все гадание на кофейной гуще. Проблема осталась та же.
StrBuf2 не изменяется в процессе работы цикла.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2009, 20:07
Привет! Вот еще темы с ответами:

Найти в тексте первое вхождение заданного слова (С++) - C++
Добрый день! Искал на форуме свою задачу оченьдолго так и не нашел. Есть похожие. Извиняюсь сразу если была такая уже. Нужен код программы...

Найти первое вхождение в строку заданного ключевого слова - C++
1. Обеспечить ввод строки, затем определить ее длину, и определить в ней первое вхождение заданного ключевого слова, например, ‘from’,...

Найдите и замените вхождение некоторого слова на заданное пользователем слово - C++
Найдите и замените вхождение некоторого слова на заданное пользователем слово Используя стандартные строковые функции из библиотеки...

Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» - C++
Задача: Дан текстовый файл f. Сформировать файл h, заменив каждое вхождение слова «это» на слово «то». Слова – группы символов, разделенные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.11.2009, 20:07
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru