![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Неожиданно столкнулся с трудностями в реализации процедуры разбиения строки на слова.
Я пишу эмулятор файловой системы. Мне нужно полный путь, который выглядит, допустим,вот так: имя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 |
![]()
Сообщение
#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
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
С++? Тогда зачем тебе Сишные примочки? Вот так: #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 |
![]()
Сообщение
#4
|
Гость ![]() |
char name[14] = {0};
sprintf(name, "%s", vec[1].c_str());
переводит... А зачем тебе это? Можно же работать с std::string, а когда надо получить строку как const char * - просто использовать .c_str() |
Rocket |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
char name[14] = {0};
sprintf(name, "%s", vec[1].c_str());
переводит... А зачем тебе это? Можно же работать с std::string, а когда надо получить строку как const char * - просто использовать .c_str()переводит ![]() |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 6:46 |