【发布时间】:2017-01-29 08:57:33
【问题描述】:
如果我有一个像char str [] = "hello;people;how;are;you" 这样的字符串
并使用strchr(str,";") 如何获取字符串的第 N 个标记?
【问题讨论】:
如果我有一个像char str [] = "hello;people;how;are;you" 这样的字符串
并使用strchr(str,";") 如何获取字符串的第 N 个标记?
【问题讨论】:
好的,找到了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;
}
【讨论】:
tokenized 肯定不能为以后的free() 恢复。
const char * 上使用strtok(string) 是未定义的行为。尝试对其进行编码,看看您启用良好的编译器是否会发出警告。
假设您将 strchr 存储在 char * ch 中
然后 ch-str+1 将返回您在 strchr 中查找的字符的位置
使用预定义的子字符串函数或定义您自己的函数,您可以像这样创建一个 while 循环:
i=0;
while(ch != NULL)
{
printf("Your subsrting is : %s", substring_function(i,(ch-str+1)));
i = ch-str+1;
ch=strchr(ch+1,';');
}
【讨论】:
strchr ,它的参数是令牌,而不是位置 i。
ch,所以它是一个无限循环。