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 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.06.2009 11:02
Сообщение #4


Гость






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

 

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