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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
wolfdaver_77
6 / 6 / 3
Регистрация: 20.09.2016
Сообщений: 59
Завершенные тесты: 1
#1

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

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

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

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

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

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

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

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

Помогите найти ошибку: функция замены символа в строке - C++
При вводе символа '!' функция shift меняет его на 1, но в цикл передает все равно '!' char Shift(char x){ if(x=='!') x='1'; ...

8
gru74ik
Модератор
Эксперт CЭксперт С++
4169 / 1817 / 198
Регистрация: 20.02.2013
Сообщений: 4,958
Записей в блоге: 21
20.10.2016, 17:40 #2
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
Не использовать стандартную библиотеку шаблонов
wolfdaver_77, вообще?
0
wolfdaver_77
6 / 6 / 3
Регистрация: 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 / 3
Регистрация: 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
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,400
Завершенные тесты: 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;
}
1
wolfdaver_77
6 / 6 / 3
Регистрация: 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
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,400
Завершенные тесты: 1
21.10.2016, 14:43 #8
Кстати
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
И цикл начинался с 0, а не 1
почему нулевой символ не надо было учитывать?
0
wolfdaver_77
6 / 6 / 3
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2016, 16:20
Привет! Вот еще темы с ответами:

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

Реализовать программу для поиска и замены символов в строке - C++
прошу помощи, задания : 1) Напишите функцию поиска символа в строке с такой сигнатурой: char *findSym(char str, char sym); Эта...

Написать функцию замены элементов на 8 с заданной позиции до конца массива - C++
Написать функцию замены элементов на 8 с заданной позиции до конца массива (с проверкой истинности позиции). Вот такой код есть: ...

Создать функцию замены символов в char строке? - C++
У меня вышеприведенный код работает лиш для замены первого встретившегося символа -- далее не идет даже копирования из исходной строки -...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
21.10.2016, 16:20
Ответ Создать тему
Опции темы

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