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

Заменить в строке символы ":" на ";" - C++

Восстановить пароль Регистрация
 
phyzalis
Сообщений: n/a
16.01.2013, 22:45     Заменить в строке символы ":" на ";" #1
Задание следующее: в строке из n символов (задается из консоли) заменить все символы ":" символами ";".
Проблема: программа завершает работу сразу после ввода значения n. Подскажите, есть ли ошибка, и если да, то где?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    char *str;
    int n;
    cout<<"n=";
    cin>>n;
    str=(char*)malloc(n*sizeof(char));
    cout<<"enter string: ";
    gets(str);
    for (int i = 0; i <= strlen(str); i++) {
        if (*(str+i) == ':') {
            *(str+i) = ';';
        }
    }   
    puts(str);
    free(str);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 22:45     Заменить в строке символы ":" на ";"
Посмотрите здесь:

C++ В тексте заменить символы "fh" на символ "с"
Сколькими способами можно получить строку "В" из строки "А", вычеркивая некоторые символы C++
C++ Подсчитать в строке, содержащей арифметическое выражение, количество используемых цифр и букв, заменить "+" на "-", подсчитать количество действий
C++ работа со строкой: как заменить сочетание букв "л*г" на "лаг"
C++ в заданном двоичном коде заменить все цифры "0" на "1" и наоборот
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.01.2013, 22:48     Заменить в строке символы ":" на ";" #2
phyzalis, std::replace
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.01.2013, 23:01     Заменить в строке символы ":" на ";" #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    char *str;
    int n;
    
    cout << "n = ";
    cin >> n; // после ввода целого числа в буфере ввода останется несчитанным символ '\n'...
    cin.ignore(); // ...пропускаем его 
    
    ++n;
    str = (char*) malloc(n * sizeof(char));
    
    cout << "enter string: ";
    cin.getline(str, n);
    
    for (int i = 0; *(str + i) != '\0'; i++) {
        
        if (*(str + i) == ':') {
            
            *(str + i) = ';';
        }
    }   
    cout << str << endl;
    free(str);
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.01.2013, 23:02     Заменить в строке символы ":" на ";" #4
Или
C++
1
2
3
4
5
6
7
8
9
10
char* tok;
char* outstr=new char [strlen(str)];
outstr[0]='\0';
tok=strtok (str,";");
while (tok)
{
strcat(outstr,tok);
strcat(outstr,";");
tok=strtok(NULL,";");
}
Можно еще так.
В outstr будет нужна строка.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.01.2013, 00:49     Заменить в строке символы ":" на ";" #5
Wolkodav, во-первых не правильно. Во-вторых не эффективно.

Добавлено через 3 минуты
rangerx, в цикле лучше бы указатель наращивали, а не доп. переменную. Эффективней(опять же доп. Указатель). Конечно мое сообщение из разряда придирок, и мы не знаем как его компилятор оптимизирует, ну так просто ради диалога
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
17.01.2013, 00:50     Заменить в строке символы ":" на ";" #6
Цитата Сообщение от go Посмотреть сообщение
Wolkodav, во-первых не правильно. Во-вторых не эффективно.
Пока что самый эффективный метод предложил rangerx, IMHO
phyzalis
Сообщений: n/a
17.01.2013, 00:53     Заменить в строке символы ":" на ";" #7
Большое спасибо!
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
17.01.2013, 01:02     Заменить в строке символы ":" на ";" #8
Ну если про указатели, то еще вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------------------------------------------------------------------------
void my_replace(char *str)
{
    for( ; *str; ++str)  if(*str==':') *str=';';
}
//---------------------------------------------------------------------------
int main()
{
char str[]="1a2b3:4c5:78";
 
my_replace(str);
 
std::cout<<str<<std::endl;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
17.01.2013, 01:03     Заменить в строке символы ":" на ";" #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
 
int main()
{
    int N;
    std::cin >> N;
    char* str = new char[++N];
    std::cin.ignore();
    std::cin.getline(str, N);
    std::replace(str, str + N, ':', ';');
    std::cout << str << std::endl;
    delete []str;
}
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.01.2013, 01:23     Заменить в строке символы ":" на ";" #10
Kuzia domovenok, покуда только Avazart, вариант с шаблонами тоже сильно затратный.

Добавлено через 38 секунд
Kuzia domovenok, там простая индексация. Это медленно.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
17.01.2013, 02:08     Заменить в строке символы ":" на ";" #11
Цитата Сообщение от go Посмотреть сообщение
Kuzia domovenok, покуда только Avazart, вариант с шаблонами тоже сильно затратный.
Добавлено через 38 секунд
Kuzia domovenok, там простая индексация. Это медленно.
Ну если мотыгой собирать, то возможно...

Если смотреть под "оптимизацией" упрощением записи, то вариант rangerx превратится в мой...
Если мой вариант обобщить, то получим вариант с шаблонами, который после инсталирования ...

Добавлено через 1 минуту
Но походу основная проблема была в правильном считывании строки...
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
17.01.2013, 11:32     Заменить в строке символы ":" на ";" #12
go, Ну про неправильность я бы еще поспорил))
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.01.2013, 12:32     Заменить в строке символы ":" на ";" #13
Wolkodav, а что спорить. У вас в коде описка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 18:33     Заменить в строке символы ":" на ";"
Еще ссылки по теме:

Как использовать символы из русского алфавита, а так же символы типа "█" "░" и т.д.? C++
Во введённой строке требуется поменять все буквы "а" на "i", и наоборот C++
Найти все вхождения в строку последовательности символов "сто" и заменить на "100" C++

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

Или воспользуйтесь поиском по форуму:
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
17.01.2013, 18:33     Заменить в строке символы ":" на ";" #14
Возможно)
Yandex
Объявления
17.01.2013, 18:33     Заменить в строке символы ":" на ";"
Ответ Создать тему
Опции темы

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