Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 13.01.2010, 21:19   #1
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Восклицание с++: проблема с функцией извлечения текста &am

Хочется сделать функцию для извлечения слова из строчки слов,разделенных разделителем.
StringWordGet(string str,string separ,int token_index)
где str-строка источник, separ-разделитель, token_index-позиция слова.
Например, если
str="aaa,bbb,ccc,ddd,eee,fff"
separ=","
0-ое слово будет aaa
1-е bbb
2-e ccc
и т.д. Вот такая прога для этого у меня получается:
string str="aaa,bb,ccccc,d,eeeeee";//исходная строка-токены 0,1,2,3,4
string separ=",";//разделитель

string::size_type pos;//= int-текущий номер позиции разделителя
int pos_index=1,//текущий индекс массива позиций разделителя
    *pos_massive;//массив местоположения разделителей (от 0 до хрена ())

pos=str.find_first_of(separ);//позиция,где попадается первый разделитель
//1) заполняем массив позиций разделителя
while (pos != string::npos)//пока не пройдемся по всей строке
 {
  pos_massive[pos_index]=pos;
  pos = str.find(separ,pos+1);
  pos_index=pos_index+1;
 }
//2) вырезаем кусок текста-токен
string token;//кусок текста
int token_index=2;//номер токена
if (token_index==0) {token=str.substr(0,pos_massive[token_index+1]);}
else
 {
  token=str.substr(pos_massive[token_index]+1,pos_massive[token_index+1]-pos_massive[token_index]-1);
 }
 
cout << token <<endl;
Выводом будет: ccccc

Вот сама функция из этой проги получается такой:
string StringWordGet(string str,string separ,int token_index)
 {
  string::size_type pos;//= int-текущий номер позиции разделителя
  int pos_index=1,//текущий индекс массива позиций разделителя
     *pos_massive;//массив местоположения разделителей (от 0 до хрена ())

  pos=str.find_first_of(separ);//позиция,где попадается первый разделитель
  //1) заполняем массив позиций разделителя
  while (pos != string::npos)//пока не пройдемся по всей строке
   {
    pos_massive[pos_index]=pos;
    pos = str.find(separ,pos+1);
    pos_index=pos_index+1;
   }
  //2) вырезаем кусок текста-токен
  string token;//кусок текста
  if (token_index==0) {token=str.substr(0,pos_massive[token_index+1]);}
  else
   {
    token=str.substr(pos_massive[token_index]+1,pos_massive[token_index+1]-pos_massive[token_index]-1);
   }
  return token;
 }
Проблема в том, что ее вызов вываливается с Segmentation fault. Хотя все компилится. Что надо исправить?
(Offline)
 
Ответить с цитированием
Старый 13.01.2010, 23:00   #2
jimon
 
Сообщений: n/a
Ответ: с++: проблема с функцией извлечения текст&am

ух
int pos_index=1,
     *pos_massive;
и где ты инициализируешь pos_massive ? он же у тебя указывает в никуда
 
Ответить с цитированием
Старый 13.01.2010, 23:59   #3
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений
(для 245 пользователей)
Ответ: с++: проблема с функцией извлечения текст&am

На мой взгляд - это обрывки от чего-то большего ... тут трудно точно ответить, так как некоторые вещи не определены...
ЗЫ это из курсовой или зачета?
ЗЗЫ еще надо написать #include "string.h" а то работать не будет...
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
(Offline)
 
Ответить с цитированием
Старый 14.01.2010, 09:45   #4
ISergey
AnyKey`щик
 
Регистрация: 10.11.2008
Сообщений: 18
Написано 4 полезных сообщений
(для 5 пользователей)
Ответ: с++: проблема с функцией извлечения текст

Хочется сделать функцию для извлечения слова из строчки слов,разделенных разделителем.
Уже есть в Си..
http://www.cplusplus.com/reference/c...string/strtok/
__________________
Шутить надо так, чтобы потом не было мучительно больно за бесцельно выбитые зубы.
(Offline)
 
Ответить с цитированием
Старый 14.01.2010, 21:02   #5
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: с++: проблема с функцией извлечения текста

большое спасибо отписавшимся) решение нашол-действительно надо было выделять память для массива pos_massive
(Offline)
 
Ответить с цитированием
Старый 16.01.2010, 03:32   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: с++: проблема с функцией извлечения текст

а проще использовать std::vector и непариться (если скорость не критична, а судя по коду - она не критична, иначе бы резльтаты кешировались).
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 22:46.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com