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

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

Войти
Регистрация
Восстановить пароль
 
phyzalis
Сообщений: n/a
#1

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

16.01.2013, 22:45. Просмотров 556. Ответов 13
Метки нет (Все метки)

Задание следующее: в строке из 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++ Найти и заменить в строке все символы "а" на "b"
В заданом тексте заменить все символы ":" на символы "-" и наоборот C++
C++ В тексте заменить символы "fh" на символ "с"
Все буквы "е" в строке заменить на "и" C++
Как использовать символы из русского алфавита, а так же символы типа "█" "░" и т.д.? C++
Каждую заглавную букву заменить строчной буквой, пару букв "ки" заменить на "ю" C++
C++ В строке заменить буквосочетания "ой" на "эх!"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.01.2013, 22:48     Заменить в строке символы ":" на ";" #2
phyzalis, std::replace
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
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
602 / 455 / 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++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.01.2013, 00:49     Заменить в строке символы ":" на ";" #5
Wolkodav, во-первых не правильно. Во-вторых не эффективно.

Добавлено через 3 минуты
rangerx, в цикле лучше бы указатель наращивали, а не доп. переменную. Эффективней(опять же доп. Указатель). Конечно мое сообщение из разряда придирок, и мы не знаем как его компилятор оптимизирует, ну так просто ради диалога
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
17.01.2013, 00:50     Заменить в строке символы ":" на ";" #6
Цитата Сообщение от go Посмотреть сообщение
Wolkodav, во-первых не правильно. Во-вторых не эффективно.
Пока что самый эффективный метод предложил rangerx, IMHO
phyzalis
Сообщений: n/a
17.01.2013, 00:53     Заменить в строке символы ":" на ";" #7
Большое спасибо!
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,454
Записей в блоге: 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
Модератор
Эксперт CЭксперт С++
7192 / 4358 / 634
Регистрация: 29.11.2010
Сообщений: 11,867
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++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.01.2013, 01:23     Заменить в строке символы ":" на ";" #10
Kuzia domovenok, покуда только Avazart, вариант с шаблонами тоже сильно затратный.

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

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

Добавлено через 1 минуту
Но походу основная проблема была в правильном считывании строки...
Wolkodav
602 / 455 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
17.01.2013, 11:32     Заменить в строке символы ":" на ";" #12
go, Ну про неправильность я бы еще поспорил))
go
Эксперт C++
3586 / 1366 / 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++ В заданном двоичном коде заменить все цифры "0" на "1" и наоборот
Удалить все символы "*", а символы, не являющиеся "*", удвоить C++
Во введённой строке требуется поменять все буквы "а" на "i", и наоборот C++
C++ Каждую последовательность символов"АBC" заменить на"ALPHABET"
C++ Заменить всякое вхождение слова "это" на слово "то"

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

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

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