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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Damir1990
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 40
05.10.2011, 17:06     Удалить из строки слова с четными номерами #1
Помогите написать программу которая будет удалять из строки слова с четными номерами
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2011, 17:06     Удалить из строки слова с четными номерами
Посмотрите здесь:

C++ Вывести на экран все слова с четными номерами.
Удалить из строки все слова с нечётными номерами C++
C++ Распечатать введенную строку, удалив из неё слова с нечетными номерами и перевернув слова с четными номерами
Распечатать введенную строку, удалив из неё слова с нечетными номерами и добавив перевернутое слово к слову с четными номерами. C++
C++ Переставить местами строки с четными и нечетными номерами в матрице
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.10.2011, 17:13     Удалить из строки слова с четными номерами #2
чем именно помочь? вы даже не удосужились уточнить язык - Си или С++
Damir1990
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 40
05.10.2011, 17:15  [ТС]     Удалить из строки слова с четными номерами #3
Ой извините в языке С++
Примерный план написания мне необходим
-=ЮрА=-
Заблокирован
Автор FAQ
05.10.2011, 20:34     Удалить из строки слова с четными номерами #4
Вот накидал. Проект решил сделать простеньким (обощёлся без функций из string.h). Алгоритм построен на следующем - исходная строка трансформируется в строку, в которой слова отделены ровно 1-м пробелом. Затем удаляются чётные слова, после осуществляется вывод на экран(если вначале и конце строки были пробелы - они дописываются)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <conio.h>
using namespace std;
 
long StrGetLength(char * s);//Возвращает длинну строки
char * InsStrToStr (char * s, long pos, char * buf);
//Удаляем из строки множественные пробелы (если таковые есть)
char * RemNumSpaces(char * s);
//Удаляем из строки слово которое начинается в позиции pos
char * RemStrWord(char * s, long pos);
 
int main()
{
    char str[1025];//Думаю 1024 символов будет достаточно
    //Запомним число пробелов до начала текста и после него
    //т.к. в программе сожмём текст до слов и пробелов между ними
    long nFirst, nLast, sLen, i;
    do
    {
        nFirst = 0;
        nLast  = 0;
 
        std::cout<<"Enter input string\r\n";
        std::cin.getline(str,1024);
 
        //Удаляем все пробелы до превого слова
        while(str[0] == ' ' && str)
        {
            InsStrToStr(str, 0, str + 1);
            nFirst++;
        }
        sLen = StrGetLength(str);
        //Удаляем все пробелы вконце
        while(str[sLen - 1 - nLast] == ' ')
            nLast++;
        //Обрезаем пробелы вконце строки
        str[sLen - nLast] = '\0';
 
        //Удаляем множественные пробелы между словами
        std::cout<<RemNumSpaces(str)<<"\r\n";
 
        //Ну а теперь можем удалять чётные слова
        i = 0;
        while(*(str + i))
        {
            if(str[i] == ' ')//Чётное слово
                RemStrWord(str, i + 1);//Удаляем его
            i++;
        }
        std::cout<<"String after removing odding(WordNum % 2 == 0) words\r\n";
        //Выводим начальные пробелы, которые мы вначале убрали
        for(i = 0; i < nFirst; i++)
            std::cout<<" ";
        std::cout<<str;
        //И не забываем дописать убранные пробелы вконце
        for(i = 0; i < nLast; i++)
            std::cout<<" ";
        std::cout<<"\r\nPress Y for continue\r\n";
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
long StrGetLength(char * s)
{
    long sLen = 0;
    while(*(s + sLen))
        sLen++;
    return sLen;
}
 
char * InsStrToStr(char * s, long pos, char * buf)
{
    long i = 0;
    if(s != NULL && s + pos && buf != NULL )
    {
        while((buf + i)[0] != '\0')
        {
            s[pos + i] = buf[i];
            i++;
        }
        s[pos + i] = '\0';
    }
    return s;
}
 
char * RemNumSpaces(char * s)
{
    long i = 0;
    while(*(s + i))
    {
        if(*(s + i + 2))
        if(s[i] == ' ' && s[i + 1] == ' ')
        {
            InsStrToStr(s, i + 1, s + i + 2);
            i--;//Вернёмся на уже вставленное
        }
        i++;
    }
    return s;
}
 
char * RemStrWord(char * s, long pos)
{
    long sLen, WordLen = 0;
    if(s != NULL && s + pos)
    {
        sLen = StrGetLength(s);
        while(*(s + pos + WordLen))
        {
            if(s[pos + WordLen] == ' ')
                break;
            WordLen++;
        }
        InsStrToStr(s, pos - 1, (s + pos + WordLen));
        s[sLen - WordLen] = '\0';//Подезаем строку на длинну слова
    }
    return s;
}
Миниатюры
Удалить из строки слова с четными номерами  
Damir1990
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 40
05.10.2011, 20:44  [ТС]     Удалить из строки слова с четными номерами #5
огромное спасибо

Добавлено через 2 минуты
-=ЮрА=-,
скинте мне что ли свой кошыль я вам заплачу за помощь
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.10.2011, 21:17     Удалить из строки слова с четными номерами #6
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
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
 
 
int main()
{
    std::vector< std::string > words_vec;
    
    std::cout << "Enter string: ";
 
    std::string words;
    std::getline(std::cin, words);
 
    std::istringstream istr(words);
 
    std::string word;
 
    while (istr >> word)
        words_vec.push_back(word);
        
    int i = 1;
 
    words_vec.erase(std::remove_if(words_vec.begin(), words_vec.end(), [&i](const std::string &) -> bool { return (i++ & 1) == 0; }), words_vec.end());
 
    std::copy(words_vec.begin(), words_vec.end(), std::ostream_iterator< std::string >(std::cout, " "));
 
    std::cout << std::endl;
 
    return 0;
}
Добавлено через 1 минуту
Кстати, программу можно было бы сиильно сократить, если бы работало вот это:
C++
1
std::vector< std::string > words_vec((std::istream_iterator< std::string >(std::cin)), std::istream_iterator< std::string >());
Но оно почему-то не работает (ввод никогда не прекращается, Ctrl + X не помогает), поэтому пришлось писать такой костыль со стрингстримами...
-=ЮрА=-
05.10.2011, 21:29     Удалить из строки слова с четными номерами
  #7

Не по теме:

Damir1990, я заблокирован и ЛС отсутсвует, поэтому если у вас есть желание связаться со мной посетите мой профиль и нажмите вкладку Связь...

Yandex
Объявления
05.10.2011, 21:29     Удалить из строки слова с четными номерами
Ответ Создать тему
Опции темы

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