С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 19
1

Функция: вставка заданного символа в указанную позицию строки

20.07.2020, 12:52. Показов 3545. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый , написал функцию , но программа завершается с какой то ошибкой . подскажите пожалуйста в чем причина (

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
#include <time.h>
#include <string.h>
#include <iostream>
#include <string>
using namespace std;
void add_elem_poz(char* arr, int poz,char element) {
    int count = strlen(arr);
    char* arr1 = new char[count + 1];       
    
    for (int i = 0;i < poz;++i) {
        arr1[i] = arr[i];
    }
    arr1[poz] = element;
    for (int j = poz + 1; j !='/0';++j) {
        arr1[j] = arr[j - 1];
    }
    delete[]arr;
    puts( arr1) ;
    delete[]arr1;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    /*Задание 3. Написать функцию, которая вставляет в строку
        в указанную позицию заданный символ.*/
    char* arr = new char[200];
    cout << " Введите предложение : " << endl;
    gets_s(arr, 200);
    add_elem_poz(arr, 2, 'Q');
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2020, 12:52
Ответы с готовыми решениями:

Функция, определяющая позицию самого первого вхождения заданного символа в исходную строку
Прошу помочь решить задачки!:(очень нужно (Билет №25) Составить функцию, позволяющую определить...

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

Вывести все символы исходной строки а$, начиная от первого заданного символа x$ до последнего заданного символа y$
Мужики, спасайте ^^ 2)Вывести все символы исходной строки а$, начиная от первого заданного...

Вставить в указанную позицию строки заданное количество пробелов
помогите, пожалуйста, написать программу. вставить в указанную позицию строки заданное количество...

8
Модератор
2840 / 1791 / 932
Регистрация: 16.10.2013
Сообщений: 5,161
Записей в блоге: 15
20.07.2020, 13:23 2
Цитата Сообщение от beahero Посмотреть сообщение
C++
14
for (int j = poz + 1; j !='/0';++j) {
тут нужен другой слеш (\).

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
#include <time.h>
#include <string.h>
#include <iostream>
#include <string>
using namespace std;
void add_elem_poz(char* arr, int poz,char element) {
    int count = strlen(arr);
    char* arr1 = new char[count + 1];       
    
    for (int i = 0;i < poz;++i) {
        arr1[i] = arr[i];
    }
    arr1[poz] = element;
    for (int j = poz + 1; j < count + 1;++j) {
        arr1[j] = arr[j - 1];
    }
    delete[]arr;
    puts( arr1) ;
    delete[]arr1;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    /*Задание 3. Написать функцию, которая вставляет в строку
        в указанную позицию заданный символ.*/
    char* arr = new char[200];
    cout << " Введите предложение : " << endl;
    gets_s(arr, 200);
    add_elem_poz(arr, 2, 'Q');
}
1
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
20.07.2020, 13:40 3
Лучший ответ Сообщение было отмечено beahero как решение

Решение

Цитата Сообщение от long399 Посмотреть сообщение
тут нужен другой слеш (\)
еще тут нужен элемент массива, уж коли автор задает цикл до окончания строки (то бишь по нуль-байту)
C++
1
for (int j = poz + 1; arr[j] != '\0';++j)
так же, по хорошему, нуль-байт надо подставлять в конец результирующей строки, так как в таком цикле он не копируется из исходной строки в результирующую
C++
1
arr1[count + 1] = '\0';
PS. очень плохая идея удалять массив arr переданный в функцию внутри функции, по хорошему удалять массив следует в том же блоке в котором выделялась память под него.
1
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 19
20.07.2020, 14:04  [ТС] 4
что то ваш пример выдает на конце какие то доп символы (
Миниатюры
Функция: вставка заданного символа в указанную позицию строки  
0
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 19
20.07.2020, 14:10  [ТС] 5
добавил ноль в конец массива , удаление массива перенес в само тело программы , но все равно заканчивает с ошибкой (
или я опять что то напутал , прошу прощения ,если что не так , -я только учусь )
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
#include <time.h>
#include <string.h>
#include <iostream>
#include <string>
using namespace std;
void add_elem_poz(char* arr, int poz, char element) {
    int count = strlen(arr);
    char* arr1 = new char[count + 1];
 
    for (int i = 0;i < poz;++i) {
        arr1[i] = arr[i];
    }
    arr1[poz] = element;
    arr1[count + 1] = '\0';
    for (int j = poz + 1; j != '/0';++j) {
        arr1[j] = arr[j - 1];
    }
    puts(arr1);
    delete[]arr1;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    /*Задание 3. Написать функцию, которая вставляет в строку
        в указанную позицию заданный символ.*/
    char* arr = new char[200];
    cout << " Введите предложение : " << endl;
    gets_s(arr, 200);
    add_elem_poz(arr, 2, 'Q');
    delete[]arr;
}
Миниатюры
Функция: вставка заданного символа в указанную позицию строки  
0
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
20.07.2020, 14:18 6
beahero, 15 строка, у Вас там опять осталось
C++
1
for (int j = poz + 1; j != '/0';++j)
у Вас тут цикл запущен, пока индекс j не станет равен нульбайту, а надо идти по копируемой строке (и нульбайт пишется с бэк-слэшем), то есть
C++
1
2
3
4
for (int j = poz; arr[j] != '\0';++j)
{
    arr1[j + 1] = arr[j];
}
1
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 19
20.07.2020, 14:28  [ТС] 7
изменил все , как вы говорите , но все равно заканчивает с ошибкой

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
#include <time.h>
#include <string.h>
#include <iostream>
#include <string>
using namespace std;
void add_elem_poz(char* arr, int poz, char element) {
    int count = strlen(arr);
    char* arr1 = new char[count + 1];
 
    for (int i = 0;i < poz;++i) {
        arr1[i] = arr[i];
    }
    arr1[poz] = element;
    arr1[count + 1] = '\0';
    for (int j = poz; arr[j] != '\0';++j)
    {
        arr1[j + 1] = arr[j];
    }
    puts(arr1);
    delete[]arr1;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    /*Задание 3. Написать функцию, которая вставляет в строку
        в указанную позицию заданный символ.*/
    char* arr = new char[200];
    cout << " Введите предложение : " << endl;
    gets_s(arr, 200);
    add_elem_poz(arr, 2, 'Q');
    delete[]arr;
}
Миниатюры
Функция: вставка заданного символа в указанную позицию строки  
0
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
20.07.2020, 14:35 8
beahero, пересоберите проект (Rebuild)
1
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 19
20.07.2020, 14:42  [ТС] 9
заменил в 8й строке char* arr1 = new char[count + 1];
на char* arr1 = new char[200];
и все заработало )
всем большое спасибо !
0
20.07.2020, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2020, 14:42
Помогаю со студенческими работами здесь

Вставить слово в указанную позицию во все строки массива
У меня есть массив string, который заполняет пользователь. После того как массив заполнен нужно...

Найти в строке позицию заданного символа
Помогите кто чем может нужно составить программку в паскале в ассемблере, Чтобы можно было найти в...

Определить в строке позицию заданного символа
Определить в строке позицию заданного символа (Через рекурсии). Подскажите как сделать?

Выделение строки с заданного начального символа до заданного конечного символа
Для каждого задания создать модуль и разработать ниже перечисленные функции, затем выполнить...

Выделение строки с заданного начального символа до заданного конечного символа
NewCopy – выделение строки с заданного начального символа до заданного конечного символа NewDelete...

Рекурсия и списки: вставка заданного элемента в список на N-ую позицию
Написать программу вставки заданного элемента в список на N-ую позицию


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

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