Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
1

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

07.10.2012, 18:00. Показов 1661. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно вывести все слова, отличные от 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;
            }
Проблема заключается в следуещем: программа выводит текст до слова хелло, а дальше не выводит. Что то до меня никак не дойдет, что поправить(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2012, 18:00
Ответы с готовыми решениями:

Напечатать все слова отличные от последнего слова, предварительно перенести последнюю букву в начало слова
Дано текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв, между...

Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы
Близиться сессия,а завтра мне сдавать 2 проги. Помогите ребят,могу даже 100 скинуть,если уж так...

Дана строка. Напечатать все слова из нее , отличные от слова hello
Дана строка. Напечатать все слова из нее , отличные от слова hello.

Задан текст. Напечатать все слова, отличные от последнего слова
Задан текст. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое...

19
19 / 19 / 13
Регистрация: 03.10.2010
Сообщений: 48
07.10.2012, 18:13 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 елемента менше.
Логическое и это "&&" а не "&"
0
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 18:37  [ТС] 3
wtf?, Спасибо за ответ, но проблема остается
0
1 / 1 / 1
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 18:51 4
А зачем k++?
Сам не могу понять почему то, логичнее было бы если выводило всю фразу, кроме буквы h в слове hello.
Еще прошу обратить внимание, что j увеличивается в любом случае, что не есть правильно. Надо объединить text1[j] = text[i]; j++; в один блок.
0
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 18:57  [ТС] 5
NEW_NAME, после объединения в один блок text1[j] = text[i]; j++ все стало работать. спасибо)
через k выведу количество удаленных слов в конце
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
07.10.2012, 19:01 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;
    }
1
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 19:03  [ТС] 7
Vourhey, спасибо, но я пока учусь с char работать)
0
1 / 1 / 1
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 19:05 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"
0
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
07.10.2012, 19:13  [ТС] 9
NEW_NAME, Да, не внимательно посмотрел сначала. Но все таки на 4 надо увеличивать, а то "o" остается. #include "stdafx.h" - при создании проекта появляется. Особо еще не разбирался, что она подключает.
0
1 / 1 / 1
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 19:13 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
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
07.10.2012, 19:15 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.
1
1 / 1 / 1
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 19:19 12
Стд как раз используется. cin и cout нравятся, а вот такие методы обращения к tmp как << и >> не нравятся. visual studio 10.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
07.10.2012, 19:28 13
NEW_NAME, разберись сам. g++

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

Кстати метод Vorhey лично у меня работает так: если строка является hello, то ничего не выводит, если же строка содержит hello, то выводит всю строку(вместе с hello).
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
07.10.2012, 21:12 17
NEW_NAME, разделитель для считывания сделать \t, если по умолчанию не работает.
0
1 / 1 / 1
Регистрация: 04.10.2012
Сообщений: 45
07.10.2012, 21:17 18
Цитата Сообщение от Vourhey Посмотреть сообщение
NEW_NAME, разделитель для считывания сделать \t, если по умолчанию не работает.
А в коде можно?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
07.10.2012, 21:21 19
Цитата Сообщение от NEW_NAME Посмотреть сообщение
А в коде можно?
Все можно.
0
0 / 0 / 0
Регистрация: 30.11.2013
Сообщений: 33
23.12.2013, 19:14 20
автор данной темы а у вас есть полный,правильный код данной программы?
0
23.12.2013, 19:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2013, 19:14
Помогаю со студенческими работами здесь

Дана последовательность слов.Напечатать все слова, отличные от слова «по»
задание со строками: Дана последовательность слов.Напечатать все слова, отличные от слова «по». ...

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между...

Напечатайте все слова из строки, отличные от заданного слова
Дана строка , состоящая из слов, разделённых пробелами, и слово . Напечатайте все слова из строки ,...

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по заданному правилу
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru