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

В каждом слове текста замените "а" на букву "е" - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.81
aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
07.03.2012, 15:56     В каждом слове текста замените "а" на букву "е" #1
В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву "б" на сочетание "ак", если "б" стоит на нечетном месте.
Помогите, пожалуйста)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
08.03.2012, 20:06  [ТС]     В каждом слове текста замените "а" на букву "е" #21
можно вопрос, здесь не обязательно подключать библиотеку строки?(ине могли бы вы добавить коментарий)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
08.03.2012, 20:17     В каждом слове текста замените "а" на букву "е" #22
Цитата Сообщение от aidoqa Посмотреть сообщение
здесь не обязательно подключать библиотеку строки?
Если используете std::string, то подключать хидер string обязательно.
aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
09.03.2012, 07:46  [ТС]     В каждом слове текста замените "а" на букву "е" #23
получается код в 24 посту сделан без испльзования строк?(как его переделать чтоб были строки?)можете переделать эту программу под хидер string?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
09.03.2012, 15:27     В каждом слове текста замените "а" на букву "е" #24

Не по теме:

Цитата Сообщение от go Посмотреть сообщение
Для выделения слов лучше использовать boost::split
Да вы только директивами include с boost новичка напугаете, а ещё хотите чтобы он использовал split



Добавлено через 36 минут
Хотел было написать свой велосипед, но возникла куча вопросов:
позиция чётная/не чётная должна быть в строке вообще или в каждом отдельном слове? И нужно ли учитывать старую позицию при замене "б" на "ак" так как в этом же случае мы заменяем один символ на два и все символы что после этой замены раньше были чётные станут не чётными и наоборот.
aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
09.03.2012, 16:18  [ТС]     В каждом слове текста замените "а" на букву "е" #25
Цитата Сообщение от Gepar Посмотреть сообщение
позиция чётная/не чётная
должна быть
Цитата Сообщение от Gepar Посмотреть сообщение
в каждом отдельном слове
Цитата Сообщение от Gepar Посмотреть сообщение
нужно ли учитывать старую позицию при замене "б" на "ак"
нужно)
Цитата Сообщение от Gepar Посмотреть сообщение
после этой замены раньше были чётные станут не чётными и наоборот.
наверное так и будет)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.03.2012, 17:20     В каждом слове текста замените "а" на букву "е" #26
Вот без boost
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>
#include <algorithm>
#include <vector>
#include <iterator>
 
typedef std::string T_str;
typedef std::vector<T_str> T_vec;
 
int split_str_to_vec(const T_str s, const T_str DELIM, T_vec &v)
{
   size_t l, r;
 
   for ( l = s.find_first_not_of(DELIM), r = s.find_first_of(DELIM, l) ; 
      l != std::string::npos ; l = s.find_first_not_of(DELIM, r), r = s.find_first_of(DELIM, l) )
      v.push_back(s.substr(l, r - l));
   return v.size();
}
 
 
int main()
{
   T_str s("a abaHello worldaa a b");
   T_vec v;
   
   split_str_to_vec(s, " ", v);
   
   std::for_each(std::begin(v), std::end(v), [] (std::string& s) 
   {
      for ( int i = s.length() - 1 ; i >= 0  ; --i )
         if ( s[i] == 'a' && !(i & 1) )
            s[i] = 'e';
         else 
            if ( s[i] == 'b' && i & 1 )
            {
               s.erase(i, 1);
               s.insert(i, "ak");
            }
    });            
   
   std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(std::cout, " "));
 
   std::cout << std::endl;
 
   return 0;
}
http://liveworkspace.org/code/012bbb...700397c7ba680c
aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
09.03.2012, 17:26  [ТС]     В каждом слове текста замените "а" на букву "е" #27
go, можно вопрос
C++
1
2
3
#include <algorithm>
#include <vector>
#include <iterator>
обязательно ли использовать эти библиотеки?если вас не затруднит не могли бы вы чу чуть добавить коментарий)

Не по теме:

не подскажете где можно прочитать как строить блок схемы?

go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.03.2012, 17:29     В каждом слове текста замените "а" на букву "е" #28
Цитата Сообщение от aidoqa Посмотреть сообщение
бязательно ли использовать эти библиотеки?
Эти хидера - да. Как Вы обойдетесь без вектора, или строки?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
09.03.2012, 17:52     В каждом слове текста замените "а" на букву "е" #29
Ну тогда мой велосипед, вроде не скрипит но чтобы ехать нужно 4 педали крутить, в двое больше тоесть, в общем две строки у меня: одна обычная, а вторая результирующая. Если с одной то придётся всё усложнить да флаг хитрый прикрутить чтобы следил за всеми этими переменами с чётной на не чётное при каждой замене б на ак ... в общем там уже будет не велосипед, а мопед, для
aidoqa, как для начинающего по-моему этот мой пример больше подойдёт.
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
#include <iostream>
#include <string>
using namespace std;
 
//весёлая функция, видно из названия
//it сама строка, endIt - конец строки, res - куда писать результат
void fun(string::iterator &it,string::iterator endIt, string &res)
{
    //бегаем циклом пока не закончитсья слово либо сама строка
    for(int i=1;!isspace(*it) && it!=endIt;it++,i++)
    {
        if(!(i%2) && *it=='a')//а на чётной позиции
         res+="b";
        else if(i%2 && *it=='b')//b на не чётной позиции
         res+="ak";
        else
         res+=*it;
    }
}
 
int main()
{
    string str="a baba gala maga";
    string res;
 
    string::iterator it;
    it=str.begin();
 
    while(it!=str.end())
    {
        //сдвинемся на начало слова
        //пока сдвигаемся - копируем мусор также и в результирующую строку
        while(!isalpha(*it))
         res+=*it++;
 
        fun(it,str.end(),res);
    }
 
    cout<<res;
}
Добавлено через 1 минуту
О, да не только я хитрил, ну раз остальные использовали вектор то тогда расходы на мою результирующую строку явно нивелируются
aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
09.03.2012, 18:01  [ТС]     В каждом слове текста замените "а" на букву "е" #30
Gepar, спасибо за помощь, сейчас буду подробно разбираться!
и всем остальным тоже спасибо)за помощь и подсказки)

Добавлено через 7 минут

Не по теме:

не подскажите где можно найти статью как делать блок схемы, я пока в них плохо разбираюсь.

Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
09.03.2012, 18:06     В каждом слове текста замените "а" на букву "е" #31
Ну так в гугле же всё есть, да и чего там особо учиться: геом. фигур всего несколько для обозначения разветвлений да обычных шагов. Ну и ещё начало и конец отметить. В общем пишем в гугле "как сделать блок схему" и проблема будет решена.

Не по теме:

Странно что вас всё ещё просят делать блок схему алгоритма, нас в универе 1 раз лишь просили это сделать. Но ведь и правда зачем её делать если и так код понятен, это же не сложная диаграмма каких-нибудь бизнес процессов как в uml.

aidoqa
09.03.2012, 18:08  [ТС]
  #32

Не по теме:

нормативы, есть нормативвы) с этим ни чего не поделаешь, блок схему не сделаешь сразу -20% и все вопрос закрыт)

aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
13.03.2012, 20:53  [ТС]     В каждом слове текста замените "а" на букву "е" #33
проверьте блок схему)
Миниатюры
В каждом слове текста замените "а" на букву "е"  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2012, 12:08     В каждом слове текста замените "а" на букву "е"
Еще ссылки по теме:

C++ я задал произвольный текст длинной 5 строк, и допустим что я ввел 5 раз букву "П" , какой цикл нужно создать чтобы пометять букву "П" на букву "Р" ?
C++ Удалять в словах, которые заканчиваются на букву "А" все другие буквы "А"
Написать программу, которая заменяет в указанном слове все буквы "b" на сочетание "ky" C++

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

Или воспользуйтесь поиском по форуму:
aidoqa
 Аватар для aidoqa
586 / 99 / 2
Регистрация: 08.02.2011
Сообщений: 839
14.03.2012, 12:08  [ТС]     В каждом слове текста замените "а" на букву "е" #34
подскажите правильно или нет?
Yandex
Объявления
14.03.2012, 12:08     В каждом слове текста замените "а" на букву "е"
Ответ Создать тему
Опции темы

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