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

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

Войти
Регистрация
Восстановить пароль
 
Гайфи
15 / 9 / 2
Регистрация: 17.10.2015
Сообщений: 110
#1

Функция для замены в строчном массиве одного символа на другой. - C++

28.10.2015, 18:13. Просмотров 372. Ответов 11
Метки нет (Все метки)

Доброго времени суток, программисты!
Возникла, значит, проблема: Написал функцию для замены в строчном массиве одного символа на другой.
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
void Replace(char C1, char C2, char* &String);
void Replace(char C1, char C2, char* &String)
{
    const int Length = sizeof(String);
    short SymCounter = 0;
    for(int i = 0; i <= Length; i++)
    {
        if(String[i]==C1)     //Проверить текущий символ.
        {
            String[i] = C2;   //Если он подходит, заменить его
            SymCounter ++;
        }
    }
    cout << "\nDone! " << SymCounter << " of "" << C1 << "" Replaced As "" << C2 << ""!";
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char* Welcome;
    Welcome = "Добро Пожаловать!";
    Replace(160, 33, Welcome);    //Заменить все буквы а на восклицательные знаки
    cout << "\n: " << Welcome;   //Вывести строку на экран
    return 0;
}
Результат должен быть "Добро Пож!лов!ть", но строка остается без изменения. Где ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2015, 18:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция для замены в строчном массиве одного символа на другой. (C++):

Реализовать функцию замены одного символа на другой в заданной строке - C++
Нужно написать функцию для замены символа 'о' на &quot;аа&quot; . Не использовать стандартную библиотеку шаблонов, возвращаемое значение типа char*...

Нужна небуферизированная функция для считывания одного символа - C++
Здавствуйте! Мне нужна небуферизированная функция для считывания одного символа. В Window был getch(), теперь нужно найти аналог. ...

Помогите найти ошибку: функция замены символа в строке - C++
При вводе символа '!' функция shift меняет его на 1, но в цикл передает все равно '!' char Shift(char x){ if(x=='!') x='1'; ...

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

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

Указатели в строчном массиве - C++
Помогите, пожалуйста с лабораторной. Ну никак мне эти указатели не влазят в голову :( , может с вашей подсказкой на примере своей...

11
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.10.2015, 18:20 #2
Цитата Сообщение от Гайфи Посмотреть сообщение
Replace(160, 33, Welcome); //Заменить все буквы а на восклицательные знаки
Ну так и пиши '!' и 'а', а не какие-то неочевидные коды. Для начала.
А вообще sizeof(String) вернет тебе не то, что ты ожидаешь, а размер указателя (4 или 8 байт, скорее всего).
1
GbaLog-
Любитель чаепитий
3029 / 1397 / 337
Регистрация: 24.08.2014
Сообщений: 4,962
Записей в блоге: 1
Завершенные тесты: 2
28.10.2015, 18:22 #3
Гайфи,
cout << "\nDone! " << SymCounter << " of "" << C1 << "" Replaced As "" << C2 << ""!";
Вот это выводит?
Может ты ищешь английский символ, но я не уверен.
И да, лучше заменить
const int Length = sizeof(String);
На
const int Length = String.length();
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.10.2015, 18:25 #4
Цитата Сообщение от makfak Посмотреть сообщение
String.length();
Хех. Это ж указатель на char. Откуда там length? strlen нужен.
Гайфи, а ссылки на указатель - это вообще ужас-ужас!
1
GbaLog-
Любитель чаепитий
3029 / 1397 / 337
Регистрация: 24.08.2014
Сообщений: 4,962
Записей в блоге: 1
Завершенные тесты: 2
28.10.2015, 18:27 #5
Tulosba, А, да, просто уже привык к строкам, да и голова сегодня болит, не стоит сегодня советовать.
0
Гайфи
15 / 9 / 2
Регистрация: 17.10.2015
Сообщений: 110
28.10.2015, 18:43  [ТС] #6
Tulosba,makfak, Да, спасибо. Облажался с sizeof

Добавлено через 1 минуту
"а" и "!" у меня рассматриваются как строчные константы(Code Blocks). Не знаю, почему
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.10.2015, 18:44 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Гайфи Посмотреть сообщение
"а" и "!" у меня рассматриваются как строчные константы
Потому что кавычки надо одинарные (чтоб был символ), а не двойные (строка).
Почувствуй разницу '!' и "!".
1
Гайфи
15 / 9 / 2
Регистрация: 17.10.2015
Сообщений: 110
28.10.2015, 19:30  [ТС] #8
Хмм, действительно. Спасибо. Вообще как то забыл о существовании этой одинарной кавычки

Добавлено через 43 минуты
В строке
C++
1
String[i] = C2;
все просто крашится, я в отчаянии
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.10.2015, 21:18 #9
Гайфи, итоговый полный код приведи.
0
Гайфи
15 / 9 / 2
Регистрация: 17.10.2015
Сообщений: 110
29.10.2015, 14:30  [ТС] #10
Tulosba,
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 <iostream> 
#include <string.h>
using namespace std;
 
void Replace(char C1, char C2, char* &String);
void Replace(char C1, char C2, char* &String)
{
    const int Length = strlen(String);
    short SymCounter = 0;
    for(int i = 0; i <= Length; i++)
    {
        if(String[i] == C1)
        {
            cout << "\n" << String[i] << " equals " << C1;
            String[i] = C2;     //Тут краш
            SymCounter ++;
        }
        cout << "\n" << String[i] << " not equals " << C1;
    }
    cout << "\nDone! " << SymCounter << " of "" << C1 << "" Replaced As "" << C2 << ""!"; // тут слеш-кавычки, но на форуме не 
       //они не отображаются
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char* Welcome = "Welcome";
    cout << strlen(Welcome);
    Replace('e', '#', Welcome);
    cout << "\n " << Welcome;
    return 0;
}
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.10.2015, 14:36 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Гайфи, поменяй сигнатуру:
C++
1
void Replace(char C1, char C2, char* String); // убрали ссылку
И заменить "указатель на строковый литерал" на "массив":
C++
1
char Welcome[] = "Welcome";
Модификация строковых литералов приводит к неопределенному поведению (UB)
1
Гайфи
15 / 9 / 2
Регистрация: 17.10.2015
Сообщений: 110
29.10.2015, 14:40  [ТС] #12
Спасибо, все работает Выручили
0
29.10.2015, 14:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2015, 14:40
Привет! Вот еще темы с ответами:

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

Как в переменной строкового типа заменить все вхождения одного символа на другой? - C++
Подскажите как в переменной строкового типа заменить все вхождения одного символа на другой. Очень обрадуюсь ссылке или примеру кода...

Функция вставляющая элементы одного массива в другой через один - C++
Добрый вечер форум:) Подскажите пожалуйста сдавал зачет по по инфе,на теорию то ответил))Скажите что тут нужно было сделать в 3 задании,а...

Составить алгоритм и программу для замены в заданном массиве - C++
Только С++ Составить алгоритм и программу для замены в заданном массиве Р(N) всех нулевых элементов, которые стоят на нечетных местах,...


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

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

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