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

Реализовать функцию замены одного символа на другой в заданной строке - C++

Восстановить пароль Регистрация
 
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
20.10.2016, 17:31     Реализовать функцию замены одного символа на другой в заданной строке #1
Нужно написать функцию для замены символа 'о' на "аа" .
Не использовать стандартную библиотеку шаблонов, возвращаемое значение типа char* .
Задачка простая, интересуют только способы её решения. Свой вариант изложу вечером, т.к. С телефона.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2016, 17:31     Реализовать функцию замены одного символа на другой в заданной строке
Посмотрите здесь:

Написать и протестировать функцию для замены символов “:” на “.” в заданной строке C++
Написать функцию замены всех цифр в строке пробелами C++
Помогите найти ошибку: функция замены символа в строке C++
C++ Написать функцию замены элементов на 8 с заданной позиции до конца массива
C++ Функция для замены в строчном массиве одного символа на другой.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
 Аватар для gru74ik
3116 / 1342 / 167
Регистрация: 20.02.2013
Сообщений: 3,808
Записей в блоге: 17
20.10.2016, 17:40     Реализовать функцию замены одного символа на другой в заданной строке #2
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
Не использовать стандартную библиотеку шаблонов
wolfdaver_77, вообще?
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
20.10.2016, 18:35  [ТС]     Реализовать функцию замены одного символа на другой в заданной строке #3
Как я понял, да)
gru74ik
20.10.2016, 18:53
  #4

Не по теме:

wolfdaver_77, ну, тогда в Си поехали.

wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
20.10.2016, 23:40  [ТС]     Реализовать функцию замены одного символа на другой в заданной строке #5
я не корректно выразился, наверное)
нужно написать программу на С++, но функций из стандартной библиотеки нельзя использовать.
Прототип функции:
C++
1
char* func(char*);
Добавлено через 23 минуты
вот то, что я написал, вроде норм все, но в конце краказябры выскакивают
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 <conio.h>
#include <string>
 
using namespace std;
 
char* myfunc(char* source)
{
    int i(0);
    for (int k(1); source[k] != '\0'; k++)
    {
        i++;
        if (source[k] == 'o')
            i++;
    }
    const int n = i;
    char* outp = new char[i];
    
    for (int j(0), k(0); source[j] != '\0'; j++)
        if (source[j] != 'o')
        {
            outp[k] = source[j];
            k++;
        }
        else
        {
            outp[k++] = 'a';
            outp[k++] = 'a';
        }
    return outp;
}
 
int main(int argc, char **argv)
{
    char* a = { "Hello world!" };
    char* s = myfunc(a);
    cout << s << endl;
    system("pause");
    return 0;
}
Добавлено через 34 минуты
Цитата Сообщение от gru74ik Посмотреть сообщение

Не по теме:

wolfdaver_77, ну, тогда в Си поехали.

Верните тему назад в С++, программа не должна быть на си, извините, что кручу голову)
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
21.10.2016, 07:57     Реализовать функцию замены одного символа на другой в заданной строке #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
35
36
37
#include <iostream>
using namespace std;
 
char* myfunc(char* source)
{
    int i(0);
    for (int k=1; source[k] != '\0'; k++)
    {
        i++;
        if (source[k] == 'o')
            i++;
    }
    char* outp = new char[i];
    int k=0;  
    for (int j=0; source[j] != '\0'; j++)
        if (source[j] != 'o')
        {
            outp[k] = source[j];
            k++;
        }
        else
        {
            outp[k++] = 'a';
            outp[k++] = 'a';
        }
        outp[k]=0; // забыли терминальный ноль
    return outp;
}
 
int main()
{
    char a[] = "Hello world!"; // a нежелательно делать указателем на константную строку
    char* s = myfunc(a);
    cout << s << endl;
    system("pause");
    return 0;
}
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
21.10.2016, 10:11  [ТС]     Реализовать функцию замены одного символа на другой в заданной строке #7
Кликните здесь для просмотра всего текста
Цитата Сообщение от zss Посмотреть сообщение
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
#include <iostream>
using namespace std;
 
char* myfunc(char* source)
{
    int i(0);
    for (int k=1; source[k] != '\0'; k++)
    {
        i++;
        if (source[k] == 'o')
            i++;
    }
    char* outp = new char[i];
    int k=0;  
    for (int j=0; source[j] != '\0'; j++)
        if (source[j] != 'o')
        {
            outp[k] = source[j];
            k++;
        }
        else
        {
            outp[k++] = 'a';
            outp[k++] = 'a';
        }
        outp[k]=0; // забыли терминальный ноль
    return outp;
}
 
int main()
{
    char a[] = "Hello world!"; // a нежелательно делать указателем на константную строку
    char* s = myfunc(a);
    cout << s << endl;
    system("pause");
    return 0;
}

Блин, теперь работает. Я почему то думал, что 0 символ ставиться автоматически.
Итого, на тесте у меня были такие элементарные ошибки:
создал масив
C++
1
char* outp[i];
И цикл начинался с 0, а не 1 и не правильно считало нужное количество символов.
C++
1
2
3
4
5
6
for (int k(1); source[k] != '\0'; k++)
    {
        i++;
        if (source[k] == 'o')
            i++;
    }
Ошибки элементарные.
Мои шансы на прохождения собеседования резко упали (
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
21.10.2016, 14:43     Реализовать функцию замены одного символа на другой в заданной строке #8
Кстати
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
И цикл начинался с 0, а не 1
почему нулевой символ не надо было учитывать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2016, 16:20     Реализовать функцию замены одного символа на другой в заданной строке
Еще ссылки по теме:

Замена одного символа на другой C++
C++ Создать функцию замены символов в char строке?
Замена одного символа на другой в строке C++

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

Или воспользуйтесь поиском по форуму:
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 56
Завершенные тесты: 1
21.10.2016, 16:20  [ТС]     Реализовать функцию замены одного символа на другой в заданной строке #9
Цитата Сообщение от zss Посмотреть сообщение
Кстати
почему нулевой символ не надо было учитывать?
C++
1
2
3
4
5
6
7
for (int k(0); source[k] != '\0'; k++)
    {
        i++;
        if (source[k] == 'o')
            i++;
    }
i++;
Я так на тесте написал, но дома проверил, запустил, и у меня как то зазор получался между концом строки и 0 символом.
Ход мыслей был такой: k считывает все символы, на каждом к i прибавляется 1, если находит 'o' - добавляет не 1, а 2. А уже после цикла я добавлял 1 для нулевого символа.
Думал, вроде, правильно, но с реализацией чет напартачил.
И еще вопрос: этоту задачу можно решить как то оптимальнее?

Добавлено через 3 минуты
А нет, запустил еще раз, всё нормально работает, наверное что то ввёл не так сначала.
Ну хоть с счетчиком все нормально сделал)
Yandex
Объявления
21.10.2016, 16:20     Реализовать функцию замены одного символа на другой в заданной строке
Ответ Создать тему
Опции темы

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