Re[4]: посоветуйте аналог strtok
От: korzhik Россия  
Дата: 04.11.04 14:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Может я чего не допонял,но tk.ptr не кончается на \0

правильно

А>И как же мне выделить нужную подстроку не вызывая никаких функций с tk.len

структура token уже содержит всю нужную информацию:
— указатель на подстроку в исходной строке и
— её длину

ты можешь работать с ней используя функции принимаюшие количество символов, например,
в случае сравнения строк, вместо использования функции strcmp надо использовать strncmp:
  tokenizer::token tk1 = tok1.current_token();
  tokenizer::token tk2 = tok2.current_token();
  if (std::strncmp(tk1.ptr, tk2.ptr,std::min(tk1.len,tk2.len)) == 0)
  {
  }


если же тебе всё таки надо получать подстроки как отдельный строки, то можно делать например так:
  str::string str(tk.ptr, tk.len):
Re[5]: посоветуйте аналог strtok
От: Аноним  
Дата: 04.11.04 14:25
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Может я чего не допонял,но tk.ptr не кончается на \0

K>правильно

А>>И как же мне выделить нужную подстроку не вызывая никаких функций с tk.len

K>структура token уже содержит всю нужную информацию:
K> — указатель на подстроку в исходной строке и
K> — её длину

K>ты можешь работать с ней используя функции принимаюшие количество символов, например,

K>в случае сравнения строк, вместо использования функции strcmp надо использовать strncmp:
K>
K>  tokenizer::token tk1 = tok1.current_token();
K>  tokenizer::token tk2 = tok2.current_token();
K>  if (std::strncmp(tk1.ptr, tk2.ptr,std::min(tk1.len,tk2.len)) == 0)
K>  {
K>  }
K>


K>если же тебе всё таки надо получать подстроки как отдельный строки, то можно делать например так:

K>
K>  str::string str(tk.ptr, tk.len):
K>


Мне нужно использовать atoi для преобразования подстроки в целое число

Если я использую str::string str(tk.ptr, tk.len),то какой смысл было писать
свой класс,чтобы потом использовать еще один класс.
Re[6]: посоветуйте аналог strtok
От: kmn Украина  
Дата: 04.11.04 14:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мне нужно использовать atoi для преобразования подстроки в целое число



for (int i = 0; i < 6; ++i)
{
    int iValue1 = strtol(string1, end, 10);
    string1 = end + 1;

    int iValue2 = strtol(string2, end, 10);
    string2 = end + 1;

...

    int iValueN = strtol(stringN, end, 10);
    stringN = end + 1;

}
Re[6]: посоветуйте аналог strtok
От: korzhik Россия  
Дата: 04.11.04 14:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мне нужно использовать atoi для преобразования подстроки в целое число


#include <tokenizer.h> //
#include <iostream>    // for std::cout, std::endl 
#include <cstdio>      // for _snscanf

int main()
{
  tokenizer tok1("_");
  tok.set_str("112_23_4_556_2");

  while (tok.next())
  {
    tokenizer::token tk = tok.current_token();

   
    int i;
    _snscanf(tk.ptr, tk.len, "%d", &i);
    std::cout << i << std::endl;

  }
Re[3]: посоветуйте аналог strtok
От: korzhik Россия  
Дата: 04.11.04 15:01
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>korzhik предложил использовать свой класс,но в конце использует

А>>для выделения подстроки еще один класс — string
K>в своём примере я использую класс std::string только для вывода в поток

я забыл что у потоков есть очень удобная функция write
с помошью неё можно избавиться от использования std::string
  tokenizer::token tk = tok.current_token();

  //std::cout << std::string(tk.ptr, tk.len) << std::endl;
  std::cout.write(tk.ptr, tk.len) << std::endl;
Re[7]: посоветуйте аналог strtok
От: Аноним  
Дата: 04.11.04 15:12
Оценка:
Здравствуйте, kmn, Вы писали:

kmn>Здравствуйте, Аноним, Вы писали:


А>>Мне нужно использовать atoi для преобразования подстроки в целое число


kmn>

kmn>for (int i = 0; i < 6; ++i)
kmn>{
kmn>    int iValue1 = strtol(string1, end, 10);
kmn>    string1 = end + 1;

kmn>    int iValue2 = strtol(string2, end, 10);
kmn>    string2 = end + 1;

kmn>...

kmn>    int iValueN = strtol(stringN, end, 10);
kmn>    stringN = end + 1;

kmn>}

kmn>

Спасибо большое.Отличное решение.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.