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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ ошибки при компиляции программы С++ http://www.cyberforum.ru/cpp-beginners/thread360953.html
Подскажите где я совершил ошибки. Вот задача:Составить класс файл. Класс должен обладать следующими свойствами:путь к файлу, имя файла, права пользователя, размер файла и дату его последнего обновления.Кроме того в состав класса должны быть включены след методы, для изменения информации о файле(размер, дата последнего обновления, права пользователя), для вывода информации на экран, для возврата...
C++ Помогите настроить Eclipse Скачал с офф сайта Эклипс последней версии,распаковал . Запускаться он отказался,поставил Яву,запустил ... Создаю новый проект на C++ .Выбираю Empty проект.Он создался и не понимаю,где окно программирования... Объясните,как его использовать... http://www.cyberforum.ru/cpp-beginners/thread360936.html
C++ Сложение двух больших чисел
#include <vector> #include <fstream> #include <string> using namespace std; int main() { const int base = 1000 * 1000 * 1000; vector <int> n;
C++ метод в for_each
Привет всем. Есть класс и структурка: struct Foo { Foo(): name("nx"), val(9) {} string name; int val;
C++ Обявление шаблонного класса http://www.cyberforum.ru/cpp-beginners/thread360910.html
Как-то с пониманием С++ вроде уже все норм, осталась только одна тема немного темная - шаблоны, вроде бы и понимаю как они работают да и штука нужная, но все таки не которые детали синтаксиса и реализации кажутся немного "инопланетянскими", к примеру описание класса сигнала в бусте(boost/signal.hpp) template<typename Signature, // Function type R (T1, T2, ..., TN) typename...
C++ НОК 3 натур числа Помогите форумчане:) Тема:Функции Составить программу для нахождения наименьшего общего кратного трех натуральных чисел. подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
05.10.2011, 20:34     Удалить из строки слова с четными номерами
Вот накидал. Проект решил сделать простеньким (обощёлся без функций из 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;
}
Миниатюры
Удалить из строки слова с четными номерами  
 
Текущее время: 18:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru