IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Разбиение строки, с++
Rocket
сообщение 2.06.2009 23:03
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Неожиданно столкнулся с трудностями в реализации процедуры разбиения строки на слова.
Я пишу эмулятор файловой системы. Мне нужно полный путь, который выглядит, допустим,вот так: имя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();
}


Как до ума это довести? или вообще как это реализовать? подскажите пожалуйста...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 2.06.2009 23:29
Сообщение #2


Гость






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

#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
сообщение 3.06.2009 10:46
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(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 ?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 19:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"