Помощь - Поиск - Пользователи - Календарь
Полная версия: Разбиение строки
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Rocket
Неожиданно столкнулся с трудностями в реализации процедуры разбиения строки на слова.
Я пишу эмулятор файловой системы. Мне нужно полный путь, который выглядит, допустим,вот так: имя1#имя2#имя3 - разбить на отдельные каталоги, то есть слова имя1, имя2, имя3.
Вот что я вымучил (отдельно процедура разбиения):

#include<iostream.h>
#include<windows.h>
#include<conio.h>

using namespace std;
void xproc()
{
char way[140];
scanf("%s",way);
char road[14];
int k = 0, l = 0, ct = 0, i = 0;
while (way[i] != '\0' )
{

if (way[i+1]== '#' || way[i+1]== '\0')
{


ct = i-k;
for(int j = 0; j<ct; j++)
road[j] = way[j+l];

k = i+1;
l = ct+2;

cout<<road<<endl;

}

i++;

}
}
int main()
{
xproc();
getch();
}


Как до ума это довести? или вообще как это реализовать? подскажите пожалуйста...
volvo
С++? Тогда зачем тебе Сишные примочки? Вот так:

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <iterator>

using namespace std;
void xproc()
{
string way = "name1#name2#name3\0";

replace(way.begin(), way.end(), '#', ' ');
istringstream inputString(way);
vector<string> vec((istream_iterator<string>(inputString)), istream_iterator<string>());

for(unsigned i = 0; i < vec.size(); i++) {
cout << vec[i] << endl;
}
}

int main()
{
xproc();
cin.get();
return 0;
}
все прекрасно разбивает...
Rocket
Цитата(volvo @ 3.06.2009 0:29) *

С++? Тогда зачем тебе Сишные примочки? Вот так:

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <iterator>

using namespace std;
void xproc()
{
string way = "name1#name2#name3\0";

replace(way.begin(), way.end(), '#', ' ');
istringstream inputString(way);
vector<string> vec((istream_iterator<string>(inputString)), istream_iterator<string>());

for(unsigned i = 0; i < vec.size(); i++) {
cout << vec[i] << endl;
}
}

int main()
{
xproc();
cin.get();
return 0;
}
все прекрасно разбивает...

Большое спасибо, volvo !
А как слово из vec[i] записать в char name[14], то есть в массив из char ?..
volvo
char name[14] = {0};
sprintf(name, "%s", vec[1].c_str());
переводит... А зачем тебе это? Можно же работать с std::string, а когда надо получить строку как const char * - просто использовать .c_str()
Rocket
Цитата(volvo @ 3.06.2009 12:02) *

char name[14] = {0};
sprintf(name, "%s", vec[1].c_str());
переводит... А зачем тебе это? Можно же работать с std::string, а когда надо получить строку как const char * - просто использовать .c_str()


переводит smile.gif спасибо! А нужно мне это, потому что у меня идёт работа везде в программе через чаровский массив... но теперь буду знать и такой способ)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.