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

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

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

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

10.08.2014, 12:00. Просмотров 375. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2014, 12:00     Функция должна заменять каждое появление с1 в строке str на с2
Посмотрите здесь:

C++ Написать и протестировать функцию, которая по заданной строке Str формирует новую строку, состоящую только из цифр, входящих в Str
Метод cin.getline(str,n,'\n'), если в строке более n-1 символа C++
C++ Функция должна вернуть 4 параметра
C++ Если в строке нет символа +, то оставить строку без изменений, иначе каждую из цифр перед символом + заменять на *
Написать функцию setmin(T&x). Она должна заменять x на элемент, заведомо меньший всех элементов массива C++
Функция в строке должна вычислять количество слов (слова разделяются пробелом) C++
C++ как создать функцию или программу, чтобы str состояла из цифр,а также давалась новой строке str
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4870 / 3009 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
10.08.2014, 12:09     Функция должна заменять каждое появление с1 в строке str на с2 #2
Всё правильно, меняй на char str[], иначе указатель будет указывать на константу.
В чём вопрос?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.08.2014, 12:11     Функция должна заменять каждое появление с1 в строке str на с2 #3
Цитата Сообщение от xarakara Посмотреть сообщение
C++
1
2
3
char *str="1111-1111";// если поменять на
             // char str[]="1111-1111";
             // то все работает
Потому что когда Вы пишите char* (хотя должно быть как минимум const char*) выделения памяти доступной для записи не происходит.
Создается строковый литерал, который нельзя изменять. Из-за этого и ошибка при запуске.
Когда пишите char[], то создается массив (и выделяется память), который можно изменять. И пока не выйдите за рамки этого массива изменения содержимого допустимы.
dimabubyakin
 Аватар для dimabubyakin
158 / 123 / 44
Регистрация: 16.10.2013
Сообщений: 1,734
Завершенные тесты: 5
10.08.2014, 12:20     Функция должна заменять каждое появление с1 в строке str на с2 #4
xarakara, вы присваиваете значение "константе"
xarakara
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 2
10.08.2014, 12:25  [ТС]     Функция должна заменять каждое появление с1 в строке str на с2 #5
все понял большое спасибо всем
MilkyWay888
2 / 2 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
29.12.2016, 19:34     Функция должна заменять каждое появление с1 в строке str на с2 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
char *str="1111-1111";// если поменять на // char str[]="1111-1111";// то все работает
Получается изменять массив можно (массив может получать значения пользователя с cin), но только нужно присвоить ему значение? Ведь такой код не работает char str[];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 19:48     Функция должна заменять каждое появление с1 в строке str на с2
Еще ссылки по теме:

C++ Функции str.size() и str.length() - в чем их разница?
Как заставить Strncpy вложить в itog часть символов строки str, если дина str больше, чем кол-во нужных нам символов? C++
C++ Программа, должна предвидеть ввод последованности символов и вывести на экран каждое слово в отдельном ряду
C++ Разбить на слоги каждое четное слово в строке, а каждое нечетное записать в обратном порядке

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

Или воспользуйтесь поиском по форуму:
FreeYourMind
 Аватар для FreeYourMind
114 / 114 / 42
Регистрация: 13.11.2016
Сообщений: 286
29.12.2016, 19:48     Функция должна заменять каждое появление с1 в строке str на с2 #7
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Получается изменять массив можно (массив может получать значения пользователя с cin), но только нужно присвоить ему значение? Ведь такой код не работает char str[];
ввести строковый массив можно через cin.getline или gets. но в таком случае вам надо указать размерность массива.. в противном случае вы его инициализировали в char *str="1111-1111".. зачем вам его вводить с клавиатуры?
Yandex
Объявления
29.12.2016, 19:48     Функция должна заменять каждое появление с1 в строке str на с2
Ответ Создать тему
Опции темы

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