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

Вывести все слова, отличные от hello - C++

Восстановить пароль Регистрация
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 18:00     Вывести все слова, отличные от hello #1
Нужно вывести все слова, отличные от hello

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
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string.h>
 
 
using namespace std;
 
 
 
    int main()
{
    const int n = 1000, n1 = 1000;
    char text[n], text1[n1]="";
    cout<<"Input text:\n"; cin.getline(text, n);
    int lentxt=strlen(text), k=0, j=0;
    // cout<<"Text:\n"; cout<<text<<endl;
 
    for (int i=0; i<lentxt; i++)
            {
              if ( (text[i] == 'h') & (text[i+1] == 'e') &  (text[i+2] == 'l') &  (text[i+3] == 'l') &  (text[i+4] == 'o') ) k++ ;
              else text1[j] = text[i]; j++;
            }
    cout<<"Text:\n"; cout<<text1<<endl;
 
        system ("pause");
            return 0;
            }
Проблема заключается в следуещем: программа выводит текст до слова хелло, а дальше не выводит. Что то до меня никак не дойдет, что поправить(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 18:00     Вывести все слова, отличные от hello
Посмотрите здесь:

Напечатать все слова из текста, отличные от слова hello. C++
Напечатать все слова, отличные от последнего слова C++
C++ Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по заданному правилу
C++ Напечатать все слова отличные от последнего слова, предварительно перенести последнюю букву в начало слова
Дана последовательность слов.Напечатать все слова, отличные от слова «по» C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
wtf?
19 / 19 / 0
Регистрация: 03.10.2010
Сообщений: 48
07.10.2012, 18:13     Вывести все слова, отличные от hello #2
Исправь
C++
1
2
3
 for (int i=0; i<lentxt; i++)
            {
              if ( (text[i] == 'h') & (text[i+1] == 'e') &  (text[i+2] == 'l') &  (text[i+3] == 'l') &  (text[i+4] == 'o') ) k++ ;
на
C++
1
2
3
for (int i=0; i<lentxt - 4; i++)
           {
              if ( (text[i] == 'h') && (text[i+1] == 'e') &&  (text[i+2] == 'l') &&  (text[i+3] == 'l') &&  (text[i+4] == 'o') ) k++ ;
В цикле for нужно учесть что ты берёшь елемент [i + 4], по этому нужно в цикле проходить не всю длину, а на 4 елемента менше.
Логическое и это "&&" а не "&"
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 18:37  [ТС]     Вывести все слова, отличные от hello #3
wtf?, Спасибо за ответ, но проблема остается
http://s47.***********/i117/1210/29/ee7760a5b7b8.jpg
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 18:51     Вывести все слова, отличные от hello #4
А зачем k++?
Сам не могу понять почему то, логичнее было бы если выводило всю фразу, кроме буквы h в слове hello.
Еще прошу обратить внимание, что j увеличивается в любом случае, что не есть правильно. Надо объединить text1[j] = text[i]; j++; в один блок.
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 18:57  [ТС]     Вывести все слова, отличные от hello #5
NEW_NAME, после объединения в один блок text1[j] = text[i]; j++ все стало работать. спасибо)
через k выведу количество удаленных слов в конце
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.10.2012, 19:01     Вывести все слова, отличные от hello #6
C++
1
2
3
4
5
6
7
8
    string tmp;
 
    while(tmp.compare("exit") != 0)
    {
        cin>>tmp;
        if(tmp.compare("hello") != 0)
            cout<<tmp<<endl;
    }
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 19:03  [ТС]     Вывести все слова, отличные от hello #7
Vourhey, спасибо, но я пока учусь с char работать)
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 19:05     Вывести все слова, отличные от hello #8
Объединил в один блок, работает, но не совсем так как ожидалось. Мне кажется проблема в том, что где-то пустой символ остается во второй строке и потому вывод не так происходит.
Результат получается примерно такой после объединения в один блок:
исходная строка fasfsfafhellod, получившаяся fasfsfafellod, как я и думал. Вместо какого-то непонятно к++ надо i увеличивать на 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
#include <iostream>
#include <math.h>
#include <string.h>
 
 
using namespace std;
 
    int main()
{
    const int n = 1000, n1 = 1000;
    char text[n], text1[n1]="";
    cout<<"Input text:\n"; cin.getline(text, n);
    int lentxt=strlen(text), k=0, j=0;
    // cout<<"Text:\n"; cout<<text<<endl;
 
    for (int i=0; i<lentxt; i++)
            {
              if ( (text[i] == 'h') && (text[i+1] == 'e') &&  (text[i+2] == 'l') &&  (text[i+3] == 'l') &&  (text[i+4] == 'o') ) i+=3 ;
              else 
              {
                text1[j] = text[i];
                j++;
              }
            }
    cout<<"Text:\n"; cout<<text1<<endl;
 
     system ("pause");
     return 0;
}
А зачем вот это?
C++
1
#include "stdafx.h"
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 19:13  [ТС]     Вывести все слова, отличные от hello #9
NEW_NAME, Да, не внимательно посмотрел сначала. Но все таки на 4 надо увеличивать, а то "o" остается. #include "stdafx.h" - при создании проекта появляется. Особо еще не разбирался, что она подключает.
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 19:13     Вывести все слова, отличные от hello #10
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
    string tmp;
 
    while(tmp.compare("exit") != 0)
    {
        cin>>tmp;
        if(tmp.compare("hello") != 0)
            cout<<tmp<<endl;
    }
Не компилится. Ругается на
cin>>tmp; и cout<<tmp
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.10.2012, 19:15     Вывести все слова, отличные от hello #11
Цитата Сообщение от delexa Посмотреть сообщение
я пока учусь с char работать)
C
1
2
3
4
5
6
7
8
    char s[1024];
    scanf("%s", s);
    while(strcmp(s, "exit") != 0)
    {
        if(strcmp("hello", s) != 0)
            printf("%s\n", s);
        scanf("%s", s);
    }
Добавлено через 41 секунду
NEW_NAME, ожидаемо, если без using namespace std.
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 19:19     Вывести все слова, отличные от hello #12
Стд как раз используется. cin и cout нравятся, а вот такие методы обращения к tmp как << и >> не нравятся. visual studio 10.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.10.2012, 19:28     Вывести все слова, отличные от hello #13
NEW_NAME, разберись сам. g++

Добавлено через 6 минут
Хотя, если он видит класс, но не видит оператора, то, наверное, ты забыл что-нибудь типа #include <string>
Хе-хе
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 19:30  [ТС]     Вывести все слова, отличные от hello #14
Vourhey, После замены #include <string.h> на #include <string> запустилась)
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.10.2012, 19:31     Вывести все слова, отличные от hello #15
Цитата Сообщение от delexa Посмотреть сообщение
#include <string.h> на #include <string>
Мдя...кто ж с .h подключает...
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 21:04     Вывести все слова, отличные от hello #16
Да, почему-то с h работает. Кстати почему? Стандартные(или как правильно?) заголовочные файлы без h нужно подключать? Или string и string.h - разные файлы просто?

Кстати метод Vorhey лично у меня работает так: если строка является hello, то ничего не выводит, если же строка содержит hello, то выводит всю строку(вместе с hello).
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.10.2012, 21:12     Вывести все слова, отличные от hello #17
NEW_NAME, разделитель для считывания сделать \t, если по умолчанию не работает.
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 21:17     Вывести все слова, отличные от hello #18
Цитата Сообщение от Vourhey Посмотреть сообщение
NEW_NAME, разделитель для считывания сделать \t, если по умолчанию не работает.
А в коде можно?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.10.2012, 21:21     Вывести все слова, отличные от hello #19
Цитата Сообщение от NEW_NAME Посмотреть сообщение
А в коде можно?
Все можно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2013, 19:14     Вывести все слова, отличные от hello
Еще ссылки по теме:

Напечатать все слова, отличные от последнего слова. C++
C++ Напечатайте все слова из строки, отличные от заданного слова
Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы C++

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

Или воспользуйтесь поиском по форуму:
Wunschpunsch
0 / 0 / 0
Регистрация: 30.11.2013
Сообщений: 32
23.12.2013, 19:14     Вывести все слова, отличные от hello #20
автор данной темы а у вас есть полный,правильный код данной программы?
Yandex
Объявления
23.12.2013, 19:14     Вывести все слова, отличные от hello
Ответ Создать тему
Опции темы

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