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

> Внимание!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Разбиение строки, с++
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
}
все прекрасно разбивает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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


Знаток
****

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

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


Цитата(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 спасибо! А нужно мне это, потому что у меня идёт работа везде в программе через чаровский массив... но теперь буду знать и такой способ)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 2.05.2024 7:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name