Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/89: Рейтинг темы: голосов - 89, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22

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

16.12.2011, 23:52. Показов 18532. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2011, 23:52
Ответы с готовыми решениями:

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

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

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

28
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 00:00
Цитата Сообщение от BorAl Посмотреть сообщение
cout<<"Enter text\n";
* * * * cin.getline(str, 80);
* * * * cout<<"Text\n";
* * * * cout<<str<<endl;
-это ввод он должен идти перед

Цитата Сообщение от BorAl Посмотреть сообщение
for(int i=0; i < strlen(str); i++)
* * * * {
* * * * * * * * if (str[i]==' ')
* * * * * * * * * * * * {
* * * * * * * * * * * * * * * * n++;
* * * * * * * * * * * * }
* * * * * * * * n++;
* * * * }
0
 Аватар для Лжец
34 / 33 / 6
Регистрация: 13.12.2011
Сообщений: 107
17.12.2011, 00:00
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 <cstring>
#include <Windows.h>
 
using namespace std;
 
void main()
{
        char str[80];
        int n=0;
        
        cout<<"Enter text\n";
        cin.getline(str, 80);
 
        for(int i=0; i < strlen(str); i++)
        {
                if (str[i]==' ') 
                {
                                n++;
                }
        
        }
 
        cout<<"Text\n";
        cout<<str<<endl;
 
        cout<<"Kolvo slov = "<<n;
        cout<<endl;
}
Локальные переменные при объявлении без инициализации всегда хранят мусор, поэтому их важно инициализировать при объявлении нулем.
0
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 00:35  [ТС]
Ну да я наспех писал забыл присвоить n начальное значение! Но меня все смущает это выражение...
warning C4018: <: несоответствие типов со знаком и без знака
как от него избавиться? И может ли это как то повлиять на работу программы в дальнейшем при добавлении кода?

Добавлено через 27 минут
Мда. И все же мне нужна помощь в написании всей программы. У меня была такая задумка.
C++
1
2
3
char st[80];
if (n%2==0)
strcpy(st, str);
Но как оказывается все на много сложнее... прошу помощи...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 00:44
Цитата Сообщение от Лжец Посмотреть сообщение
strlen(str
на сколько помню возврат от strlen не int а long.
вот так запишите

Цитата Сообщение от Лжец Посмотреть сообщение
for(int i=0; i < strlen(str); i++)
for(long i=0; i < strlen(str); i++)
0
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 12:18  [ТС]
Цитата Сообщение от BorAl Посмотреть сообщение
Добавлено через 27 минут
Мда. И все же мне нужна помощь в написании всей программы. У меня была такая задумка.
C++
1
2
3
char st[80];
if (n%2==0)
strcpy(st, str);
Но как оказывается все на много сложнее... прошу помощи...
Что то я вообще не подумал! что n то у меня это количество пробелов!... тогда я вообще не знаю как...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.12.2011, 12:33
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
#include <stdio.h>
#include <string.h>
 
#define DELIM " \t\n"
 
int main(void){
    char bufIn[BUFSIZ], bufOut[BUFSIZ], * p;
    int cnt;
    
    while ( printf("String: ") && fgets(bufIn, BUFSIZ, stdin) && *bufIn != '\n' ){
        *bufOut = '\0';
        cnt = 0;
        
        for ( p = strtok(bufIn, DELIM); p && ++cnt; p = strtok(NULL, DELIM) ){
            if ( cnt & 1 ){
                strcat(bufOut, p);
                strcat(bufOut, " ");
            }
        }
        
        printf("Odd words: %s\n", bufOut);
    }
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 12:37  [ТС]
Конечно спасибо большое, но можно ли как то код подобный моему!
0
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
17.12.2011, 12:38
А реально нельзя ли посчитать колличество пробелов?????????
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 12:46
Цитата Сообщение от BorAl Посмотреть сообщение
Что то я вообще не подумал! что n то у меня это количество пробелов!... тогда я вообще не знаю как...
- очень просто
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
#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);
    for(int i = 0, iWord = 0; i < strlen(text); i++)
    {
        if(text[i] == ' ')
        {
            beg = i;
            i++;
            while(text[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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.12.2011, 12:48
Цитата Сообщение от BorAl Посмотреть сообщение
но можно ли как то код подобный моему
Можно, но долго и муторно. По сути прийдётся сделать велосипед, заменяющий стандартную функцию strtok()

Цитата Сообщение от maniac0192 Посмотреть сообщение
А реально нельзя ли посчитать колличество пробелов?
Можно. Только для этой задачи бестолковое занятие. Между двумя первыми словами поставит пользователь больше одного пробела, и хана всей конструкции.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 12:49
PS:BorAl, очень важно чтобы между словами был ровно 1-н пробел!
0
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 12:51  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Можно, но долго и муторно. По сути прийдётся сделать велосипед, заменяющий стандартную функцию strtok()
Понятно что можно многое! но т.к. начинающий преподавателю надо то что он требует... Так что придется изобретать велосипед...

И да, между словами будет точно только один пробел!
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 12:58
BorAl, так что тебе не нравится в моём коде из поста 10???
Кстати - теперь можжно сколько угодно пробелов
Цитата Сообщение от 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
#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);
    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
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 13:02
BorAl,
Цитата Сообщение от BorAl Посмотреть сообщение
но т.к. начинающий преподавателю надо то что он требует...
в принципе в последнем коде вам всё должно біть понятно кроме єтой строчки
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(strcpy(&text[beg], &text[end]))
- что же она делает
См наглядный пример
text = aaa bb ccc
beg = 3(т.е єто позиция пробела после aaa)
end = 6(єто пробел после bb)
strcpy(&text[beg], &text[end]) - перекопирует всё с end в beg (мы как бы вытрем bb)
text = aaa cccxxx (x - это мусор, который появится послде переноса - его просто отсекаем
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
text[strlen(text) - (end - beg)]
- вот и всё. Можно strcpy заменить ещё 1-м циклом for - но зачем раздувать код?)
0
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 13:02  [ТС]
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.12.2011, 13:03
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Кстати - теперь можжно сколько угодно пробелов
После последнего слова пробел попробуйте поставить...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 13:03
Цитата Сообщение от BorAl Посмотреть сообщение
от без этого надо бы...
- ну так удали и всё будет работать, что не знаешь просто уддаляй system("pause"); - єто аналог getch и всё
0
0 / 0 / 0
Регистрация: 09.12.2010
Сообщений: 22
17.12.2011, 13:05  [ТС]
Ну сейчас хоть что то начинает проявляться!!! а можно как то без while обойтись! у меня четко один пробел!
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
17.12.2011, 13:11
easybudda, это такой же мелкий устранимый недочёт - что даже код исправлять не хочу!В самом начале можно от конца строки пробелы отброситьт или записать в доп стринг(если хотим потом их дописать) и всё. Реально не ожидал такого замечания от знающего человека - важно что в строке пробелов можно сколь угодно много(а подрезать строку под слова - ЗАДАЧА ТРИВИАЛЬНАЯ!)

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

Добавлено через 4 минуты
BorAl, всё же этот while необходим - мы передвигаемся по строке пока не встретим конец слова
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(text[i] != ' ')
* * * * * * * * * * * * * * * * i++;
- без него никуда. Смысл цикла прост
aaa bb c
Допустим мы стали в пробел после aaa т.е
нужно в строке bb c отпарсить конец bb вот и запускаем цикл, которій остановится на пробеле после bb Пост 10 - лаконичней никак
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2011, 13:11
Помогаю со студенческими работами здесь

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

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

Ввести с клавиатуры строку символов, используя функции, и удалить каждое четное слово из строки
Всем доброго времени суток) Учусь на программиста, программируем на с++, на данный момент занимаемся массивами. Дали задание: Ввести с...

Ввести с клавиатуры строку символов, используя функции, и удалить каждое четное слово из строки
Всем доброго времени суток) Учусь на программиста, программируем на с++, на данный момент занимаемся массивами. И тут передо мной встало...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru