Здравствуйте, Аноним, Вы писали:
А>Может я чего не допонял,но tk.ptr не кончается на \0
правильно
А>И как же мне выделить нужную подстроку не вызывая никаких функций с tk.len
структура token уже содержит всю нужную информацию:
— указатель на подстроку в исходной строке и
— её длину
ты можешь работать с ней используя функции принимаюшие количество символов, например,
в случае сравнения строк, вместо использования функции strcmp надо использовать str
ncmp:
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):
Здравствуйте, 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),то какой смысл было писать
свой класс,чтобы потом использовать еще один класс.
Здравствуйте, Аноним, Вы писали:
А>Мне нужно использовать 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;
}
Здравствуйте, Аноним, Вы писали:
А>Мне нужно использовать 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;
}
Здравствуйте, 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;
Здравствуйте, 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>
Спасибо большое.Отличное решение.