Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 06.07.2020
Сообщений: 15
1

Разбить строку по 2-ум разделителям | Мучение питониста

08.12.2021, 21:45. Показов 1197. Ответов 7

Author24 — интернет-сервис помощи студентам
Привет всем!
Только начал изучать c++, и тут возникла следующая задача. Есть файл, с которого я считываю информацию при помощи getline() и записываю в вектор. Однако getline может использовать в качестве аргумента только один разделитель. На выходе строка. А как быть дальше? Как разделить предложение, допустим, по "!" знаку. Опять getline?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
int main(){
    using namespace std;
    system("chcp 65001");
    ifstream is("C:\\Users\\...\\CLionProjects\\untitled\\text");
 
    vector<string> v;
    while(is.eof() != true){
        string t;
        getline(is, t, '.');
        v.push_back(t);}
Понимаю, что в интернете куча разнообразных решений, но они слишком сложные для новичка. Пожалуйста, натолкните на путь истинный!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2021, 21:45
Ответы с готовыми решениями:

Разбить строку по нескольким разделителям
Здравствуйте! Есть строка вида: fiat-all,opel-all,m-astra,m-combo,m-zafira,volvo-all Методом...

Как разбить строку по разделителям с переносом строки
У меня есть набор разделителей (,:;.) и надо в него добавить символ или обозначение переноса...

Разделить строку по двум разделителям
Есть функция, которая разбивает входящую строку чисел по запятой и выводит их суму: public...

Как разбить строку через Split по переносам на новую строку?
У меня есть строка (string file), которая выглядит так, как на фото. Как её разбить по переносам на...

7
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,671
08.12.2021, 23:39 2
regex?
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
09.12.2021, 01:17 3
Цитата Сообщение от Privetsosed Посмотреть сообщение
но они слишком сложные для новичка
Простое решение для питониста - пишете на вашем любимом питоне скрипт, который открывает эти файлы, читает все что нужно и записывает в любом удобном для последующего разбора на С++ виде - хоть по разным строкам разные части исходных строк
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.12.2021, 02:55 4
Цитата Сообщение от Privetsosed Посмотреть сообщение
Есть файл, с которого я считываю информацию при помощи getline() и записываю в вектор
в вектор хотите записать предложения ?
0
731 / 432 / 207
Регистрация: 19.12.2016
Сообщений: 1,700
09.12.2021, 08:59 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
24
25
26
27
28
#include <iostream>
#include <string>
std::string del(const std::string &str, const std::string &delim, const std::string &split)
{
    std::string newStr, oldStr(str);
    size_t pos = 0;
    while ((pos = oldStr.find_first_of(delim)) != std::string::npos) 
    {
        if(pos == 0)
        {
            pos++;
            oldStr.erase(0, pos);
            continue;
        }
        newStr += oldStr.substr(0, pos) + split;
        oldStr.erase(0, pos + 1);
    }
    return newStr;
}
int main()
{
    std::string str = "twoo   one   five, tWo! one. two:elleven;one' two", temp;
    std::string delimetr = " ,.:;'!";
    std::string split = "\\";
    std::string newStr = del(str, delimetr, split);
    std::cout <<newStr;
    return 0;
}
1
0 / 0 / 0
Регистрация: 06.07.2020
Сообщений: 15
09.12.2021, 17:23  [ТС] 6
Решил простеньким способом.
Может кому-то пригодится этот способ, вот код:

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
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
int main(){
    using namespace std;
    system("chcp 65001");
    ifstream is("C:\\Users\\...\\CLionProjects\\untitled\\text");
    vector<string> v;
 
    int length;
    char * buffer;
    is.seekg (0, ios::end);
    length = is.tellg();
    is.seekg (0, ios::beg);
    buffer = new char [length];
    is.read (buffer,length);
    is.close();
 
    string str(buffer);
    int count = 0;
    for (int i = 0; i <= str.length(); i++){
        if (str[i] == '!' || str[i] == '.' || str[i] == '?'){
            v.push_back(str.substr(count,i - count + 1));
            count = i + 1;
        }
    }}
На выходе получаем масиив v с предложениями.
0
nmcf
09.12.2021, 17:32
  #7

Не по теме:

Я думал, в питоне есть средства посерьёзнее.

0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
09.12.2021, 17:40 8
Цитата Сообщение от Privetsosed Посмотреть сообщение
i <= str.length()
str[str.length()] - UB.
1
09.12.2021, 17:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2021, 17:40
Помогаю со студенческими работами здесь

Навыки Питониста
Есть возможность отучиться на системного администратора бесплатно. Очное обучение.2 месяца. Цель...

Си для питониста
Всем привет. Активно изучаю и использую питон. Мне язык очень понравился. Но дальше работы с вебом...

Разбиение по разделителям
Привет! Мучюсь над таким разбиением: есть строка вида: $str=' &quot;текст из любых символов 1&quot; ...

pascal мучение
1) найти наибольшее и наименьшее значение функции y=-3x(в квадрате)+x-4 если х меняется в...

Мучение со счетчиком
Доброго дня, уважаемые форумчане! Возникла необходимость создания формы для заполнения БД в...

C#, XNA - Мучение с картой 2D
Привет, люди добрые! Прошу помощи, ибо уже зае... эмм... устал. Ситуация следующая: Задача у меня...


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

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