Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 23:35   #1
mickey_smith
Новичок
Джуниор
 
Регистрация: 20.11.2013
Сообщений: 2
По умолчанию Разделитель строки

Всем привет.
Никак не могу найти решение. Помогите нубу)
Нужно разделить строку не одни символом, а двумя...

Есть строка:
Код:
string somestring=":FUNC 1;:FUNC2:SUBFUNC2 ARG1;:FUNC3:SUBFUNC3:SUBSUBFUNC3 ARG2;:FUNC4 ARG3";
Её необходимо разделить на подстроки, по признаку ";:"

Вот что написал:
Код:
#include "stdafx.h"
#include <string>
#include <fstream>
#include <iostream>
#include <conio.h>

using std::string;
using std::ifstream;

void main(void)
{
	char directory[] = "C://somedirectory//somefile.txt"; // из этого файла беру строку
	ifstream file(directory);

	string *buffer = new string[10]; // сюда записываю подстроки

	// строка в файле выглядит так : ":FUNC 1;:FUNC2:SUBFUNC2 ARG1;:FUNC3:SUBFUNC3:SUBSUBFUNC3 ARG2;:FUNC4 ARG3"

	int count=0;
	while(!file.eof())
	{
		getline(file, buffer[count], ';'); // а хотелось бы ";:"
		count++;
	}

	_getch();
}
Пробовал использовать strtok, тоже не то... Что же делать?

Последний раз редактировалось mickey_smith; 20.11.2013 в 23:41.
mickey_smith вне форума Ответить с цитированием
Старый 21.11.2013, 00:42   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:

	while(!file.eof())
	{
		getline(file, buffer[count]); 
	for(char *c=strtok(buffer[count],":;");c;c=strtok(0,":;")){
			strcpy(Куда-то,c);
	}
		count++;
	}
Вот как-то так...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2013, 01:30   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Stilet
неа
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 21.11.2013, 12:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Имеешь ввиду что в strtok() передается не строка совпадения с набор символов, которые проверяются?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2013, 13:06   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Stilet
в strtok передается набор разделителей, состоящие из одного символа. твое решение порежет строчку "111:222;333:444" на 4 токена.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 21.11.2013, 13:38   #6
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Код:
#include "stdafx.h"
#include <cstdlib>
#include <string>
#include <fstream>
#include <iostream>
#include <conio.h>

using std::string;
using std::ifstream;

int main(void)
{
	char directory[] = "C://somedirectory//somefile.txt"; // из этого файла беру строку
	ifstream file(directory);

	string buffer;
	string *substrings = new string[10]; // сюда записываю подстроки

	// строка в файле выглядит так : ":FUNC 1;:FUNC2:SUBFUNC2 ARG1;:FUNC3:SUBFUNC3:SUBSUBFUNC3 ARG2;:FUNC4 ARG3"

	int sindex = 0;
	string delim_str = ";:";
	
	while(!file.eof())
	{
		getline(file, buffer); // считываем строку полностью
		
		size_t pos = 0;
		size_t delim_pos;
		
		do
		{
			delim_pos = buffer.find(delim_str, pos);	// находим позицию очередного вхождения ";:"
			substrings[sindex] = buffer.substr(pos, delim_pos - pos);	// сохраняем подстроку
			pos = delim_pos + delim_str.size();
			sindex++;
		}
		while (delim_pos != string::npos);

	}

	_getch();
	
        delete [] substrings;
	return EXIT_SUCCESS;
}

Последний раз редактировалось nikmoon; 21.11.2013 в 13:41.
nikmoon вне форума Ответить с цитированием
Старый 21.11.2013, 14:34   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
pproger
Ну я понял )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2013, 17:24   #8
mickey_smith
Новичок
Джуниор
 
Регистрация: 20.11.2013
Сообщений: 2
По умолчанию

nikmoon всё правильно написал. Всем спасибо)
mickey_smith вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прочитать значения из строки через разделитель Xo66um Общие вопросы Delphi 4 23.08.2013 01:55
Разделитель текста n1cklan Visual C++ 0 07.10.2012 01:19
Разделитель DBGrid Kamalekb Компоненты Delphi 13 14.05.2012 23:59
Разделитель eatlant Общие вопросы Delphi 4 24.04.2011 21:09
Разделитель в текстбоксе Aqil_f Microsoft Office Excel 3 31.08.2010 15:19