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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.85
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
#1

Удалить каждое четное слово из строки - C++

16.12.2011, 23:52. Просмотров 5641. Ответов 28
Метки нет (Все метки)

Задача: Удалить каждое четное слово из строки. Это то что надо получить в конце, но т.к. я пытаюсь разобраться, хотелось бы по подробнее шаги рассмотреть!
Идею задачи я понимаю. Но сразу же столкнулся с проблемой написания кода...(подсчет количества слов в введенной строке)
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 <iostream>
#include <cstring>
#include <Windows.h>
 
using namespace std;
 
void main()
{
    char str[80];
    int n;
 
    for(int i=0; i < strlen(str); i++)
    {
        if (str[i]==' ') 
            {
                n++;
            }
        n++;
    }
    
    cout<<"Enter text\n";
    cin.getline(str, 80);
    cout<<"Text\n";
    cout<<str<<endl;
 
    cout<<"Kolvo slov = "<<n;
    cout<<endl;
}
В ходе компиляции выводится warning C4018: <: несоответствие типов со знаком и без знака
( i < strlen(str)) вот в этом месте. НЕ могли бы объяснить в чем моя ошибка!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить каждое четное слово из строки (C++):

Удалить каждое четное слово из строки - C++
Удалить каждое четное слово из строки. Есть такое начало: #include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std; const int...

Удалить каждое четное слово из строки - C++
Тема: строки в c++ Задание: Удалить каждое четное слово из строки.

Удалить каждое четное слово из текстовой строки - C++
СТРОКИ: Удалить каждое четное слово из строки.

В тексте удалить каждое четное слово, продублировать каждое нечетное слово - C++
Не могу решить данную задачу, много чего перечитал, за помощь буду благодарен В тексте удалить каждое четное слово, продублировать...

В тексте удалить каждое четное слово, продублировать каждое нечетное слово - C++
Не могу решить данную задачу, много чего перечитал, за помощь буду благодарен&quot; &quot;В тексте удалить каждое четное слово, продублировать...

Удалить каждое четное слово во введенной строке - C++
удалить каждое четное слово во введенной строке

28
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 13:02  [ТС] #16
C++
1
2
 system("pause");//Для кодблокс нужен ещё #include <cstdlib>
        return 0;
вот без этого надо бы...
и не мог бы ты написать какая переменная за что отвечает?
beg, end, iWord
C++
1
2
3
if(strcpy(&text[beg], &text[end]))
                                text[strlen(text) - (end - beg)] = '\0';
                        i -= 2;
что мы делаем в этих строчках вот?
0
easybudda
Модератор
Эксперт CЭксперт С++
9694 / 5644 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
17.12.2011, 13:03 #17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Кстати - теперь можжно сколько угодно пробелов
После последнего слова пробел попробуйте поставить...
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.12.2011, 13:03 #18
Цитата Сообщение от BorAl Посмотреть сообщение
от без этого надо бы...
- ну так удали и всё будет работать, что не знаешь просто уддаляй system("pause"); - єто аналог getch и всё
0
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 13:05  [ТС] #19
Ну сейчас хоть что то начинает проявляться!!! а можно как то без while обойтись! у меня четко один пробел!
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.12.2011, 13:11 #20
easybudda, это такой же мелкий устранимый недочёт - что даже код исправлять не хочу!В самом начале можно от конца строки пробелы отброситьт или записать в доп стринг(если хотим потом их дописать) и всё. Реально не ожидал такого замечания от знающего человека - важно что в строке пробелов можно сколь угодно много(а подрезать строку под слова - ЗАДАЧА ТРИВИАЛЬНАЯ!)

Добавлено через 35 секунд
Цитата Сообщение от BorAl Посмотреть сообщение
а можно как то без while обойтись! у меня четко один пробел!
- да сейчас, пару мин подпаяю

Добавлено через 4 минуты
BorAl, всё же этот while необходим - мы передвигаемся по строке пока не встретим конец слова
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(text[i] != ' ')
* * * * * * * * * * * * * * * * i++;
- без него никуда. Смысл цикла прост
aaa bb c
Допустим мы стали в пробел после aaa т.е
нужно в строке bb c отпарсить конец bb вот и запускаем цикл, которій остановится на пробеле после bb Пост 10 - лаконичней никак
1
easybudda
Модератор
Эксперт CЭксперт С++
9694 / 5644 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
17.12.2011, 13:11 #21
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Реально не ожидал такого замечания от знающего человека
Ну незнающий и не заметил бы. Вот по этому лучше всё-таки учиться стандартной библиотекой пользоваться. В велосипедах постоянно что-то криво получается. Понятно, что можно исправить, так ещё что-нибудь вылезет. В результате вместо двух десятков строк получается два экрана быдлокода, условно работающего при определённых обстоятельствах. По-моему так программировать никогда не научишься...
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.12.2011, 13:13 #22
BorAl, если длинна слов одинакова - тогда можно без цикла т.к. всегда можем вічислить позицию конца слова, если слова произвольно длинні то без цикла (пусть for вместо while - ну никак, можно конечно strchr использовать но вам тогда сложней для понимания будет) сейчас покажу с strchr
0
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 13:13  [ТС] #23
Спасибо огромное! Сейчас попробую поиграть с ней! дабы разобраться что и как! Будут вопросы обращусь)
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.12.2011, 13:18 #24
BorAl, можно перепаять под std::string выйдет очень лаконично

По этому варианту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
с strchr
скажу что код тяжеловатый для понимания начинабщего вышел, лучше используйте while

Цитата Сообщение от BorAl Посмотреть сообщение
Будут вопросы обращусь)
- конечно спрашивайте
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.12.2011, 13:26 #25
easybudda,
Цитата Сообщение от easybudda Посмотреть сообщение
Ну незнающий и не заметил бы. Вот по этому лучше всё-таки учиться стандартной библиотекой пользоваться. В велосипедах постоянно что-то криво получается.
- при желании можно будет сделать код ниже короче (повыносить однотипное в функции)
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 <iostream>
#include <string>
using namespace std;
 
 
int main()
{
    int beg, end;
    char text[1024];
    cout<<"Enter text(less than 1024 chars)\n";
    cin.getline(text,1024);
    beg = 0;
    while(text[beg] == ' ')
        beg++;
    strcpy(&text[0],&text[beg]);
    text[(end = (strlen(text) - beg) + 1)] = '\0';
    cout<<text<<endl;
    while(text[end] == ' ')
        end--;
    text[end] = '\0';
    for(int i = 0, iWord = 0; i < strlen(text); i++)
    {
        if(text[i] == ' ')
        {
            while(text[i] == ' ')
                i++;
            beg = i;
            i++;
            while(text[i] != ' ')
                i++;
            while(text[i] == ' ')
                i++;
            i--;
            iWord++;
            end = i;
            if((iWord - 1) % 2 == 0)
            if(strcpy(&text[beg], &text[end]))
                text[strlen(text) - (end - beg)] = '\0';
            i -= 2;
        }
    }
    cout<<"String after removing odd words\n";
    cout<<text<<endl;
    system("pause");//Äëÿ êîäáëîêñ Г*óæåГ* ГҐГ№Вё #include <cstdlib>
    return 0;
}
0
Миниатюры
Удалить каждое четное слово из строки  
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 13:29  [ТС] #26
Программа не работает!
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.12.2011, 13:38 #27
BorAl, какая именно?Последняя не тебе была
0
BorAl
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 13:43  [ТС] #28
Обе работают не правильно! Конечно может быть проблема и в компиляторе...
пишет вот такие предупреждения.

warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

warning C4018: <: несоответствие типов со знаком и без знака

warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
0
easybudda
Модератор
Эксперт CЭксперт С++
9694 / 5644 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
17.12.2011, 13:50 #29
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
при желании можно будет сделать код ниже короче
Да тут в принципе не в фанатичном укорачивании дело. Можно было бы и всем переменным имена из одной буквы давать, но за такое точно руки отрывать надо. Тут сам подход не правильный. Если речь о словах, так со словами и надо работать. Способы деления строки символов на группы по определённому признаку есть, на сколько я знаю, во всех языках программирования (ну не считая HQ9+ и прочую эзотерику), вот ими и надо учиться пользоваться.
0
17.12.2011, 13:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 13:50
Привет! Вот еще темы с ответами:

Разбить на слоги каждое четное слово в строке, а каждое нечетное записать в обратном порядке - C++
Нужно разбить на слога каждое слово на парной позиции в строчке,а каждое на непарной позиции записать в обратном порядке

Строки. Удалить каждое второе слово - C++
Например вводим : Dobruy vecher gorod Выводим : Dobruy gorod Заранее спасибо!

Найти количество простых чисел в массиве. Перевернуть все нечетные строки матрицы. Перевернуть каждое четное слово в строке - C++
Ребята помогите разобраться в коде программы, написав подробные комменты к данной проге. Спасибо! Постановка задачи 1. Используя...

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


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

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