1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 148
1

Удалить все '/' из всех std::string содержащихся в std::vector

21.06.2020, 21:42. Показов 2623. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно из всех слов содержащихся в векторе убрать все передние слеши.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void clear_words(std::vector<std::string> &words)
{
    for(int i = 0; i < words.size(); i++)
    {
        for(int t = 0; t < (words[i]).size(); t++)
        {
            if( (words[i])[t] == '/')
            {
                (words[i]).erase(t);
            }
        }
    }
}
Простая функция, но почему-то те слова, в которых есть '/', становятся пустыми, работает не так, как надо.


Не по теме:



upd:
там запятая пропущена в заголовке темы

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2020, 21:42
Ответы с готовыми решениями:

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и...

Передача функции указатель на элемент std::vector<std::string>
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в...

Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;sstream&gt; #include &lt;string&gt; using namespace...

6
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,321
21.06.2020, 21:56 2
Лучший ответ Сообщение было отмечено lukinegor как решение

Решение

lukinegor, смещение итератора нужно тоже учитывать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
...
        for(auto it=words[i].begin(); it!=words[i].end(); /*it++*/)
        {
            if( *it == '/')
            {
                it=words[i].erase(it);
            }
            else
            {
               it++;
            }
        }
...
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
21.06.2020, 21:58 3
Лучший ответ Сообщение было отмечено lukinegor как решение

Решение

lukinegor,
C++
1
2
3
4
5
6
7
8
9
void clear_words(std::vector<std::string> &words)
{
    for(size_t i = 0; i < words.size(); i++)
    {
        std::string & current = words[i];
        
        current.erase(std::remove_if(current.begin(), current.end(), [](char c) { return c == '/'; }));
    }
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
21.06.2020, 22:01 4
Лучший ответ Сообщение было отмечено lukinegor как решение

Решение

Цитата Сообщение от lukinegor Посмотреть сообщение
(words[i]).erase(t);
(words[i]).erase(t, 1);
Если был удален символ, то не нужно делать t++.
0
1 / 1 / 0
Регистрация: 31.01.2020
Сообщений: 148
21.06.2020, 22:06  [ТС] 5
Алексей1153, nonedark2008, спасибо большое! Совсем забыл про это

Добавлено через 1 минуту
DrOffset, зачем нужен current, если можно обращаться напрямую к элементу вектора?
upd: для читабельности?
0
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,321
21.06.2020, 22:11 6
lukinegor, так через ссылку и будет прямое обращение. Кстати, вариант с std::remove_if лучше, чем "вручную" итераторы перебирать
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
21.06.2020, 22:16 7
Цитата Сообщение от lukinegor Посмотреть сообщение
зачем нужен current, если можно обращаться напрямую к элементу вектора?
upd: для читабельности?
Чтобы не делать три раза words[i].

Добавлено через 25 секунд
Цитата Сообщение от lukinegor Посмотреть сообщение
можно обращаться напрямую к элементу вектора?
Это и так и так прямое обращение.
0
21.06.2020, 22:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2020, 22:16
Помогаю со студенческими работами здесь

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...

Разбить std::string на std::vector
Задание: написать функцию которая разбивает строку на слова vector&lt;string&gt; void str_to_word...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор....

Вывести значения std::vector<std::vector<int*> >
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3;...

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: ...

std::string Зачем нужен std::string::compare, если есть перегруженный оператор ==?
Зачем нужен std::string::compare, если есть перегруженный оператор ==?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru