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

Укажите ошибку! - C++

Восстановить пароль Регистрация
 
Никитах
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 10
29.03.2013, 19:04     Укажите ошибку! #1
В строке удвоить все символы ‘&’. Под вставкой символа n в строку после к-го элемента понимается смещение всех элементов, начиная с (к+1)-го вправо на 1 позицию и присваивание (к+1)-му элементу строки значения 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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
string s;
cout << "Vvedite stroku:"; cin >> s;
int n=s.size();
for (int i=0;i<n;i=n+1)
{
n=s.size();
string sti(s,i,1);
if (sti=="&")
{
 
string t(s,0,i);
string w(s,i,n-1);
s=t+"&"+w;
i=i+1;
 
}
}
cout << s << endl;
}

Что надо подправить чтобы & удваивался всегда при любом способе его ввода?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
29.03.2013, 22:51     Укажите ошибку! #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
27
28
29
30
31
32
33
34
35
36
37
38
include <iostream>
#include <algorithm>
#include <string>               
using namespace std;
 
//предикат для нахождения искомого символа
bool alpha(char elem)
{
    //возвращаем true если символ найден
    return elem == '&';
}
 
int main()
{
    char symbol = '&'; 
    string str("Hell&o w&orl&d");
    str.reserve(str.size() * 2);            //т.к. работаем с итераторами, резервируем 
                                            //память, чтобы избежать перереспределения
                                            //при вставке дубликатов
 
    //итератор
    string::iterator pos = str.begin();        
 
    //идем до конца строки и ищем
    while((pos = find_if(pos, str.end(), alpha)) != str.end()) 
    {
        //вставляем дубликат 
        str.insert(++pos, symbol);
        //переходим на новый символ
        ++pos;
    }
    
    //выводим результат
    cout << str << endl;
 
    cout << "\n\n";
    return 0;
}
Добавлено через 15 минут
Никитах, а вот твой вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>               
using namespace std;
 
int main()
{
    string s("Hell&o w&orl&d");
 
    for(unsigned i = 0; i < s.size(); ++i)
    {
        if(s[i] == '&')
        {
            string tmp(s, i, s.size() - i);     //промежуточная строки
            string tmp1(s, 0, i + 1);
            tmp1 += tmp;
            s = tmp1;
            ++i;
        }
    }
 
    cout << s << endl;
}
Никитах
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 10
29.03.2013, 23:00  [ТС]     Укажите ошибку! #3
Но мне нужно чтобы я сам вводил любое слово или предложение из консоли а не одно прописанное в программе что тогда стоит поменять в моем варианте?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
29.03.2013, 23:20     Укажите ошибку! #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
#include <iostream>
#include <string>               
using namespace std;
 
int main()
{
    string s;
    cout << "Enter the string: ";
        getline(cin, s, '\n');
 
    for(unsigned i = 0; i < s.size(); ++i)
    {
        if(s[i] == '&')
        {
            string tmp(s, i, s.size() - i);     //промежуточная строки
            string tmp1(s, 0, i + 1);
            tmp1 += tmp;
            s = tmp1;
            ++i;
        }
    }
 
    cout << s << endl;
}
Yandex
Объявления
29.03.2013, 23:20     Укажите ошибку!
Ответ Создать тему
Опции темы

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