0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 2
1

Функция должна заменять каждое появление с1 в строке str на с2

10.08.2014, 12:00. Показов 1119. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не работает код

IDE VC++ 2010 Win7

Прата С. - Язык программирования С++. Лекции и упражнения - 2011
Вопросы для самоконтроля
8. Напишите функцию, имеющую следующий прототип:
int replace (char * str, char cl, char c2) ;
Эта функция должна заменять каждое появление с1 в строке str на с2 и
возвращать количество выполненных замен.

После запуска следующая ошибка
Функция должна заменять каждое появление с1 в строке str на с2




Кликните здесь для просмотра всего текста
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;
 
int replace(char *str,char c1,char c2);
 
int main()
{
 
    char *str="1111-1111";// если поменять на
                          // char str[]="1111-1111";
                          // то все работает
 
    char c1='1';
    char c2='5';
    int value=0;
    cout << str << endl;
 
    value=replace(str,c1,c2);
 
    cout << value << endl;
    cout << str << endl;
 
    return 0;
}
 
int replace(char *str,char c1,char c2){
    int value=0;
    while(*str){
        if(*str == c1){
            *str = c2;
            value++;
        }
        str++;
    }
    return value;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2014, 12:00
Ответы с готовыми решениями:

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

Функция: по заданной строке Str сформулировать новую строку, состоящую только из цифр, входящих в Str
Написать и протестировать функцию,которая по заданной строке Str формулирует новую строку,состоящую...

Функция должна заменять все символы в каждой из строк считанного текста
Функция должна сравнивать некоторый символ1 в строке1 считанного текста с аналогичным символом2 в...

Функция, которая в строке str определяет количество вхождений в нее строки s
Даны три строки s1, s2 и s3. Получите count(s1, s2) + count(s1, s3), где count(s, str) – функция,...

6
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.08.2014, 12:09 2
Всё правильно, меняй на char str[], иначе указатель будет указывать на константу.
В чём вопрос?
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.08.2014, 12:11 3
Цитата Сообщение от xarakara Посмотреть сообщение
C++
1
2
3
char *str="1111-1111";// если поменять на
             // char str[]="1111-1111";
             // то все работает
Потому что когда Вы пишите char* (хотя должно быть как минимум const char*) выделения памяти доступной для записи не происходит.
Создается строковый литерал, который нельзя изменять. Из-за этого и ошибка при запуске.
Когда пишите char[], то создается массив (и выделяется память), который можно изменять. И пока не выйдите за рамки этого массива изменения содержимого допустимы.
1
161 / 122 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
10.08.2014, 12:20 4
xarakara, вы присваиваете значение "константе"
1
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 2
10.08.2014, 12:25  [ТС] 5
все понял большое спасибо всем
0
3 / 3 / 2
Регистрация: 03.11.2016
Сообщений: 138
29.12.2016, 19:34 6
Цитата Сообщение от Tulosba Посмотреть сообщение
char *str="1111-1111";// если поменять на // char str[]="1111-1111";// то все работает
Получается изменять массив можно (массив может получать значения пользователя с cin), но только нужно присвоить ему значение? Ведь такой код не работает char str[];
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
29.12.2016, 19:48 7
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Получается изменять массив можно (массив может получать значения пользователя с cin), но только нужно присвоить ему значение? Ведь такой код не работает char str[];
ввести строковый массив можно через cin.getline или gets. но в таком случае вам надо указать размерность массива.. в противном случае вы его инициализировали в char *str="1111-1111".. зачем вам его вводить с клавиатуры?
1
29.12.2016, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2016, 19:48
Помогаю со студенческими работами здесь

Как правильно сравнивать подстроки строк и заменять их (нельзя использовать str.replace)?
#include &lt;iostream&gt; #include &lt;string&gt; int main() { std::string str; getline(std::cin,str); ...

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

Написать и протестировать функцию, которая по заданной строке Str формирует новую строку, состоящую только из цифр, входящих в Str
Помогите ребят!!!!препод задачи дал для аттестации,сделал фактически все,кроме этой: &quot;Написать и...

Написать и протестировать функцию. Функция осуществляет циклический сдвиг литер в строке Str в заданном направлении на заданное число позиций
Помогите написать программу. Написать и протестировать функцию. Функция осуществляет циклический...


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

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

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