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

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

Войти
Регистрация
Восстановить пароль
 
xarakara
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 2
#1

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

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

Не работает код

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2014, 12:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция должна заменять каждое появление с1 в строке str на с2 (C++):

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

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

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

Функция в строке должна вычислять количество слов (слова разделяются пробелом) - C++
int sum (const char *pS ) { const char *p (pS); int n (0); while ( *p ) { if ( isspace (*p)) ++n; p++; } ...

Написать функцию setmin(T&x). Она должна заменять x на элемент, заведомо меньший всех элементов массива - C++
Подскажите, пожалуйста, где ошибка в моей функции setmin(T&amp;x). Она должна заменять x на элемент, заведомо меньший всех элементов массива. ...

Разбить на слоги каждое четное слово в строке, а каждое нечетное записать в обратном порядке - C++
Нужно разбить на слога каждое слово на парной позиции в строчке,а каждое на непарной позиции записать в обратном порядке

6
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
10.08.2014, 12:09 #2
Всё правильно, меняй на char str[], иначе указатель будет указывать на константу.
В чём вопрос?
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.08.2014, 12:11 #3
Цитата Сообщение от xarakara Посмотреть сообщение
C++
1
2
3
char *str="1111-1111";// если поменять на
             // char str[]="1111-1111";
             // то все работает
Потому что когда Вы пишите char* (хотя должно быть как минимум const char*) выделения памяти доступной для записи не происходит.
Создается строковый литерал, который нельзя изменять. Из-за этого и ошибка при запуске.
Когда пишите char[], то создается массив (и выделяется память), который можно изменять. И пока не выйдите за рамки этого массива изменения содержимого допустимы.
1
dimabubyakin
159 / 120 / 44
Регистрация: 16.10.2013
Сообщений: 1,738
Завершенные тесты: 5
10.08.2014, 12:20 #4
xarakara, вы присваиваете значение "константе"
1
xarakara
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 2
10.08.2014, 12:25  [ТС] #5
все понял большое спасибо всем
0
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
29.12.2016, 19:34 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
char *str="1111-1111";// если поменять на // char str[]="1111-1111";// то все работает
Получается изменять массив можно (массив может получать значения пользователя с cin), но только нужно присвоить ему значение? Ведь такой код не работает char str[];
0
FreeYourMind
132 / 132 / 54
Регистрация: 13.11.2016
Сообщений: 347
29.12.2016, 19:48 #7
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Получается изменять массив можно (массив может получать значения пользователя с cin), но только нужно присвоить ему значение? Ведь такой код не работает char str[];
ввести строковый массив можно через cin.getline или gets. но в таком случае вам надо указать размерность массива.. в противном случае вы его инициализировали в char *str="1111-1111".. зачем вам его вводить с клавиатуры?
1
29.12.2016, 19:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 19:48
Привет! Вот еще темы с ответами:

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

Функция должна заменять все символы в каждой из строк считанного текста - Turbo Pascal
Функция должна сравнивать некоторый символ1 в строке1 считанного текста с аналогичным символом2 в заданной строке&quot;Alf&quot;, затем менять...

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

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


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

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

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