@jenya92

Как разбить строку по разделителю?

Решил харнить базу в файле. В строе хранить записи, которые разделены точкой с запятой. База будет небольшой, значений всего три штуки, по этому решил особо не заморачиваться. Но проблема пришла откуда не ждал. Не получается разбить полученную строку по разделителю. Сам код выглядит так:
#include <iostream>
#include <fstream>
#include <string.h>
 
using namespace std;
 
int main(int argc, char *argv[]){
    ifstream fin;
    fin.open("/home/MyUzer/cpp/baze.txt");
    string FileLine;
 
    if (fin.is_open()){
        cout << "Файл успешно открыт" << endl;
 
        while(getline(fin, FileLine)){ // Считываем поочерёдно строки из файла
            cout << "Строка: " << FileLine << endl;
 
            char *pch = strtok (FileLine, ";"); // разбиваем по разделителю
 
            while (pch != NULL){ // Вводим строки
                cout << pch << ";" << endl;
                pch = strtok (NULL, ";");
            }
        }
    }
 
    else
        cout << "Ошибка открытия файла" << endl;
 
  return 0;

    }


Ошибка в 18 строке:
error: cannot convert ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string’} to ‘char*’

Понимаю, что ему не получается конвертировать string в char, но как решить сию проблему - искренне Хз.
  • Вопрос задан
  • 1864 просмотра
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Это простой способ поделить строку на подстроки.
inline std::vector<std::string_view> SplitString( std::string_view input_string, const char separator )
{
	std::vector<std::string_view> parts;

	size_t part_length = 0;
	while( ( part_length = input_string.find( separator ) ) != input_string.npos )
	{
		parts.emplace_back( input_string.data(), part_length );
		input_string.remove_prefix( part_length + 1 );
	}

	if( !input_string.empty() )
	{
		parts.push_back( std::move( input_string ) );
	}

	return parts;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы