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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 16:32   #1
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию Разбить строку по "\0"

Функция GetPrivateProfileSectionNames формирует строку вида:
Section1\0Section2\0Section3\0\0
Как получить фрагменты строки по разделителю "\0"?
Код:
#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;

#define MAX_SZ 2048

bool GetSectionName(vector<string>, LPSTR);

//
int main(void)
{
	vector<string> sectionName;

	GetSectionName(sectionName, "c:\\example.ini");

	return 0;
}

//
bool GetSectionName(vector<string> sectionName, LPSTR fullPathToINI)
{
	LPSTR pSectionName = new char[MAX_SZ];
	bool retVal;

	if(GetPrivateProfileSectionNames(pSectionName, MAX_SZ, fullPathToINI))
	{
		// PARSER

		retVal = 0;
	}
	else
		retVal = 1;
	delete[] pSectionName;
	
	return retVal;
}
Qwe1 вне форума Ответить с цитированием
Старый 18.08.2011, 17:11   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Qwe1

Как получить фрагменты строки по разделителю "\0"?

как-то так...

Код:
const char* text = "One\0Two\0Three\0Four\0";
std::vector<std::string> v;

for (const char* p = text; *p; p += v.back().size() + 1)
	v.push_back(p);
Rififi вне форума Ответить с цитированием
Старый 18.08.2011, 17:14   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

strtok пробовали?
counter вне форума Ответить с цитированием
Старый 18.08.2011, 17:28   #4
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию

Сделал в итоге так:
Код:
for (LPSTR currentSection = allSectNames; *currentSection != NULL; currentSection += lstrlen(currentSection) + 1)
			sectionsNames.push_back(currentSection);
Вывожу значения вектора в функции GetSectionName - все ок, а в main() - пусто, его надо передавать по ссылке или?
Qwe1 вне форума Ответить с цитированием
Старый 18.08.2011, 22:16   #5
Qwe1
Пользователь
 
Регистрация: 15.05.2009
Сообщений: 29
По умолчанию

Разобрался
Код:
#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;

bool GetSectionName(vector<string>&, LPSTR);

//
int main(void)
{
	vector<string> sectionsNames;

	GetSectionName(sectionsNames, "c:\\example.ini");

	vector<string>::iterator iter;
	for(iter = sectionsNames.begin(); iter != sectionsNames.end(); iter++)
		cout << (LPCSTR)iter->c_str() << endl;

	return 0;
}

//
bool GetSectionName(vector<string>& sectionsNames, LPSTR fullPathToINI)
{
	const int maxSize = 2048;
	LPSTR allSectNames = new char[maxSize];
	bool retVal;

	if(GetPrivateProfileSectionNames(allSectNames, maxSize, fullPathToINI))
	{
		for(LPSTR currentSection = allSectNames; *currentSection; currentSection += sectionsNames.back().size() /*lstrlen(currentSection)*/ + 1)
			sectionsNames.push_back(currentSection);
		retVal = 0;
	}
	else
		retVal = 1;
	delete[] allSectNames;
	
	vector<string>::iterator iter;
	for(iter = sectionsNames.begin(); iter != sectionsNames.end(); iter++)
		cout << (LPCSTR)iter->c_str() << endl;

	return retVal;
}
Qwe1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Как можно разбить "exe" файл для распечатки? Ninzjacont Помощь студентам 2 04.06.2009 15:12