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

Функция работы со строкой символов,заменить разделители - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
23.08.2012, 20:59     Функция работы со строкой символов,заменить разделители #1
Нужно решить задачу: Написать функцию работы со строкой символов, которая заменит все разделители между словами символом табуляции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2012, 20:59     Функция работы со строкой символов,заменить разделители
Посмотрите здесь:

Введите строкой набор символов без разделителей C++
Описать функцию работы со строкой символов C++
Работа со строкой (удалить все цифры, подсчитать количество и сумму удаленных цифр, заменить все заглавные латинские буквы на строчные) C++
C++ работа со строкой: как заменить сочетание букв "л*г" на "лаг"
Какая функция сравнивает строку s2 со строкой s1? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
23.08.2012, 21:05     Функция работы со строкой символов,заменить разделители #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>
 
bool is_del(const char& ch)
{
    return ispunct(ch) || isspace(ch);
}
 
int main()
{
    std::string str = "this is a string";
    std::replace_if(str.begin(), str.end(), is_del, '\t');
    std::cout << str << std::endl;
}
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
23.08.2012, 21:44  [ТС]     Функция работы со строкой символов,заменить разделители #3
А можете пояснить что в данном месте происходит?

bool is_del(const char& ch)
{
return ispunct(ch) || isspace(ch);
}
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
23.08.2012, 22:03     Функция работы со строкой символов,заменить разделители #4
Функция возвращает истину если переданный ей символ ch является пробельным или символом пунктуации.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
24.08.2012, 01:22     Функция работы со строкой символов,заменить разделители #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
 
void str_replace_chrs(char* src, const char* chrs, char chr) {
 
    while(*src) {
 
        if(std::strchr(chrs, *src) != NULL)
            *src = chr;
        ++src;
    }
}
 
int main() {
 
    char str[256];
 
    std::cout << "input string: ";
    std::cin.getline(str, sizeof(str));
    
    str_replace_chrs(str, " ,.:;?!", '\t');    
    std::cout << "result: " << str << std::endl;
}
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
24.08.2012, 19:06  [ТС]     Функция работы со строкой символов,заменить разделители #6
Спасибо, оба варианта хорошо работают.Вариант решения от rangerx более понятен для меня.
rangerx, если не трудно прокомментируйте программу, не все моменты поняла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 19:48     Функция работы со строкой символов,заменить разделители
Еще ссылки по теме:

C++ Запуск нескольких раз программы для работы со строкой
C++ Если в файле с новой строки есть 5 пробелов - заменить их на новый абзац, отделяющийся пустой строкой

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

Или воспользуйтесь поиском по форуму:
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
24.08.2012, 19:48     Функция работы со строкой символов,заменить разделители #7
RosyRose,
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
#include <iostream>
#include <cstring>
 
// Функция заменяет найденные в строке src символы строки chrs на символ chr.
void str_replace_chrs(char* src, const char* chrs, char chr) {
 
    while(*src) {  // пока не конец строки
 
        if(std::strchr(chrs, *src) != NULL) // Условие будет истинным,
                                            // если текущий символ строки окажется символом из chrs
            *src = chr;                     // и тут он будет заменён на символ chr. (strchr - библиотечная функция).
        ++src;                              // Двигаем указатель на следующий символ строки.
    }
}
 
int main() {
 
    char str[256];
 
    std::cout << "input string: ";
    std::cin.getline(str, sizeof(str));     // Вводится строка.
 
    str_replace_chrs(str, " ,.:;?!", '\t'); // Функция ищет в введённой строке str символы строки ",.:;?!" и заменяет их на '\t'.
    std::cout << "result: " << str << std::endl;
}
Yandex
Объявления
24.08.2012, 19:48     Функция работы со строкой символов,заменить разделители
Ответ Создать тему
Опции темы

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