Если у меня есть строка, например char str [] = "hello;people;how;are;you"
, и использовать strchr(str,";")
как я могу взять N-й токен строки?Итерационная строка с strchr в C
ответ
Предположим, что вы храните strchr в символ * ч
Тогда ч-СИЛ + 1 вернет вам позицию символа, который вы искали в strchr
Используя встроенную функцию подстроки или определения функция самостоятельно вы можете создать то время цикла, как это:
i=0;
while(ch != NULL)
{
printf("Your subsrting is : %s", substring_function(i,(ch-str+1)));
i = ch-str+1;
ch=strchr(ch+1,';');
}
ОК, нашли решение с strtok
, и я хотел бы преобразовать его с помощью strchr
. Tokenizer - статическая переменная, которая содержит символ для токенизации. Есть идеи?
static const char *a(const char *string,int tkn) {
char *tokenized=strdup(string);
char *token;
token=strtok(tokenized, tokenizer);
int i=0;
while(token != NULL) {
if (i == (tkn-1)) {
break;
}
token = strtok(NULL, tokenizer);
i++;
}
return token;
}
Этот подход представляет собой утечку памяти, так как выделенный «токенизируемый» не обязательно восстанавливается для более поздней «свободной»() '. – chux
Большое спасибо, я могу добавить бесплатно в конце концов. За гранью этого? –
«Я могу добавить бесплатное после всех» -> Это не так просто, как код возвращает указатель на выделенную память, но потерял начало. Предложите опубликовать ответ, который использует вашу идею «добавить бесплатную». – chux
Спасибо за ответ. Я буду использовать 'strchr', который имеет в качестве аргумента токен, а не позицию i. –
Вы не меняете 'ch' в цикле, так что это бесконечный цикл. – mch
спасибо за это –