Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
wolfdaver_77
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 1
#1

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

20.10.2016, 17:31. Просмотров 997. Ответов 8
Метки нет (Все метки)

Нужно написать функцию для замены символа 'о' на "аа" .
Не использовать стандартную библиотеку шаблонов, возвращаемое значение типа char* .
Задачка простая, интересуют только способы её решения. Свой вариант изложу вечером, т.к. С телефона.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2016, 17:31
Ответы с готовыми решениями:

Реализовать функцию, заменяющая каждое появление одного символа на другой
5. Напишите функцию, имеющую следующий прототип: int replace (char * str, char...

Функция для замены в строчном массиве одного символа на другой.
Доброго времени суток, программисты! Возникла, значит, проблема: Написал...

Замена одного символа на другой в строке
Условие такое: Дана символьная строка. Заменить все символы '!' точками, кроме...

Написать и протестировать функцию для замены символов “:” на “.” в заданной строке
13. Написать и протестировать функцию для замены символов “:” на “.” в заданной...

Реализовать функцию, заменяющую в заданной строке указанный символ на звёздочку (рекурсия)
Дана строка. Заменить все символы «а» на «*». Использовать рекурсивную...

8
gru74ik
Модератор
Эксперт CЭксперт С++
4678 / 1992 / 303
Регистрация: 20.02.2013
Сообщений: 5,290
Записей в блоге: 24
20.10.2016, 17:40 #2
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
Не использовать стандартную библиотеку шаблонов
wolfdaver_77, вообще?
0
wolfdaver_77
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 1
20.10.2016, 18:35  [ТС] #3
Как я понял, да)
0
gru74ik
20.10.2016, 18:53
  #4

Не по теме:

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

0
wolfdaver_77
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 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, ну, тогда в Си поехали.

Верните тему назад в С++, программа не должна быть на си, извините, что кручу голову)
0
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
21.10.2016, 07:57 #6
Лучший ответ Сообщение было отмечено wolfdaver_77 как решение

Решение

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;
}
1
wolfdaver_77
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 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++;
    }
Ошибки элементарные.
Мои шансы на прохождения собеседования резко упали (
0
zss
Модератор
Эксперт С++
6985 / 6547 / 4151
Регистрация: 18.12.2011
Сообщений: 17,275
Завершенные тесты: 1
21.10.2016, 14:43 #8
Кстати
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
И цикл начинался с 0, а не 1
почему нулевой символ не надо было учитывать?
0
wolfdaver_77
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 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 минуты
А нет, запустил еще раз, всё нормально работает, наверное что то ввёл не так сначала.
Ну хоть с счетчиком все нормально сделал)
0
21.10.2016, 16:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2016, 16:20

Найти максимальную длину слова в заданной строке (как реализовать функцию, возвращающую два значения?)
Задание в прикрепленном изображении. Весь форум облазил, все говорят про...

Помогите найти ошибку: функция замены символа в строке
При вводе символа '!' функция shift меняет его на 1, но в цикл передает все...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru