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

Строки, надо решить - C++

Восстановить пароль Регистрация
 
TimONstr
Сообщений: n/a
30.12.2010, 12:35     Строки, надо решить #1
через пол часа идти к преподу...сказал одну задачу сделаю-зачет поставит....
вот задача сама : (С++) В заданной строке символы стоящие на четных позициях заменить строкой "000"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
30.12.2010, 20:24     Строки, надо решить #2
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
#include <iostream>
#include <string>
#include <iterator>
#include <cctype>
 
int main()
{
    std::string str;
    const std::string ins("000");;
    std::cout << "\n\nString -> ";
    getline(std::cin, str);
 
    for(std::string::size_type i = 0; i < str.length(); i += 2)
    {
        str.insert(i, ins);
        i += 3;
    }
 
    std::string::iterator it = str.begin();
    for(std::string::size_type i = 0; i < str.length() - 1; ++i, ++it)
        if(isdigit(str[i]) && !isdigit(str[i + 1]))
            str.erase(it + 1);
 
    std::cout << "\n\nResult string -> " << str;
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.12.2010, 06:52     Строки, надо решить #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
    
int main(){
    const std::string toInsert("000");
    std::string test("abcdefgh");
    std::cout << "before: " << test << std::endl;
    int i = 1;
    while ( i < test.size() ){
        test.replace(i, 1, toInsert);
        i += toInsert.size() + 1;
    }
    std::cout << "after:  " << test << std::endl;
    return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
31.12.2010, 21:45     Строки, надо решить #4
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
//////////////////////////////////////////////////////////////////////////////////////
//В заданной строке символы стоящие на четных позициях заменить строкой "000". 
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
T_str  replace_even_symb_to(const T_str&  s, const T_str&  substr)
{
    struct  T_replace_even_symb_to
    {
        T_str  substr_;
        int    counter_;        
        T_replace_even_symb_to(const T_str&  substr) : substr_(substr), counter_()
        {}
        T_str  operator() (char  c)
        {
            return  (counter_++ % 2) ? substr_ : T_str(1, c);
        }
    };
 
    std::ostringstream            sout;
    std::ostream_iterator<T_str>  sout_beg(sout);
    std::transform(s.begin(), s.end(), sout_beg, T_replace_even_symb_to(substr));
    return  sout.str();   
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::cout << "String: ";
    T_str  s;
    std::cin >> s;
    std::cout << replace_even_symb_to(s, "000")
              << std::endl;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.01.2011, 02:45     Строки, надо решить #5
Mr.X, мы простых путей не ищем!
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
#include <iostream>
#include <string>
#include <sstream>
 
class StrProc {
    std::string buf;
public:
    StrProc(const std::string & s, const std::string & r, bool change_evens = true){
        std::ostringstream ost;
        for ( int i = 0; i < s.size(); ++i )
           if ( ( ( i & 1 ) && change_evens ) || ( ! ( i & 1 ) && ! change_evens ) )
               ost << r;
            else
                ost << s[i];
        buf = ost.str();
    }
    std::string str() const { return buf; }
};
 
std::ostream & operator << (std::ostream & ost, const StrProc & sp){
    ost << sp.str();
    return ost;
}
 
int main(){
    const std::string to_replace("000");
    std::string buf;
 
    while ( std::cout << "String: " && std::getline(std::cin, buf) && ! buf.empty() )
        std::cout << "Result: " << StrProc(buf, to_replace) << std::endl;
 
    return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
01.01.2011, 04:00     Строки, надо решить #6
Цитата Сообщение от easybudda Посмотреть сообщение
Mr.X, мы простых путей не ищем!
Да я писал свой вариант не в смысле поизвращаться, просто циклы – это сишный код, а в C++ все циклы за нас уже написал Степанов в своих алгоритмах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2011, 13:35     Строки, надо решить
Еще ссылки по теме:

C++ Экзаменационные варианты , которые надо решить
C++ Помгите решить задачу срочно надо !!!
Помогите решить прогу оченя надо C++

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

Или воспользуйтесь поиском по форуму:
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
01.01.2011, 13:35     Строки, надо решить #7
А я могу ещё проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
int main(int argc, char *argv[])
{
    std::string str,zm="000";
    std::cout<<"Enter string:"<<std::endl;
    std::getline(std::cin,str);
    for (int i=0; i<(int)str.length(); i+=4)
    {
        str.erase(str.begin()+i);
        str.insert(i,zm);
    }
    std::cout<<str<<std::endl;
    
    return 0;
}
Если честно, чрезмерное использование придуманных за нас алгоритмов только усложняют программу.
Yandex
Объявления
01.01.2011, 13:35     Строки, надо решить
Ответ Создать тему
Опции темы

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