6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
1

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

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

Author24 — интернет-сервис помощи студентам
Нужно написать функцию для замены символа 'о' на "аа" .
Не использовать стандартную библиотеку шаблонов, возвращаемое значение типа char* .
Задачка простая, интересуют только способы её решения. Свой вариант изложу вечером, т.к. С телефона.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2016, 17:31
Ответы с готовыми решениями:

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

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

Замена одного символа на другой в строке
Задание такое: написать программу, которая заменяет символ 1 на символ 2. я написал код, но он...

Замена в строке одного символа на другой
Нужно Символы «2» заменить на строчный символы «f». Как я понял нужно сначала ввести эти символы а...

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

Не по теме:

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

0
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
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
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,698
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
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
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
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,698
21.10.2016, 14:43 8
Кстати
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
И цикл начинался с 0, а не 1
почему нулевой символ не надо было учитывать?
0
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2016, 16:20
Помогаю со студенческими работами здесь

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

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

Написать процедуры для нахождения минимального и максимального в строке и замены одного элемента на другой
Дан двумерный массив размером N x M, заполненный целыми числами с клавиатуры в интервале. Написать...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru