[英]Get only one token from strtok at a time
請考慮以下具有兩個不同字符串的方案:
Row1: MyID-MyName-MyAddress-MyNumber-MyNumber2-MyAlias
Row2: MyID-MyName-MyAddress-MyNumber--MyAlias
在第二個示例中,缺少MyNumber2
的值。 我需要使用strtok()
提取每個屬性。 到目前為止,這是我的代碼:
MyID = strtok (str, "-"); //where 'str' is the full string
MyName = strtok (NULL, "-");
MyAddress = strtok (NULL, "-");
MyNumber = strtok (NULL, "-");
MyNumber2 = strtok (NULL, "-");
MyAlias = strtok (NULL, "-");
第一個例子運行良好,我能夠將每個屬性存儲在變量中。 但是,在第二個例子中,我遇到了麻煩:
當進入變量MyNumber2
, strtok()
不返回空字符串(如我所願)。 相反,它會讀取字符串,直到與分隔符"-"
不匹配的第一個字符,從而忽略字符串中空值的存在。
是否有可能每個分隔符只拆分一次字符串?
我認為你應該使用標准函數strchr
。 例如
#include <stdio.h>
#include <string.h>
int main( void )
{
char s[] = "MyID-MyName-MyAddress-MyNumber--MyAlias";
for ( char *p = s, *q = s; p != NULL; p = q )
{
q = strchr( p, '-' );
if ( q )
{
printf( "\"%*.*s\"\n", ( int )(q - p ), ( int )( q - p ), p );
++q;
}
else
{
printf( "\"%s\"\n", p );
}
}
}
程序輸出是
"MyID"
"MyName"
"MyAddress"
"MyNumber"
""
"MyAlias"
Strtok
無法標記分隔符之間的空值。 要了解原因, 請在此處查看第一個答案
我和你一樣處於同樣的境地。 我使用strstr
做同樣的事情,如下所示:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(void)
{
char str[] = "MyID-MyName-MyAddress-MyNumber--MyAlias";
char * str1, * token;
int i = 0;
int parsed_buffer_length = 0;
char * previous_delimiter_index = str;
char * delimiter_index = str;
for(;;)
{
str1 = str+parsed_buffer_length;
delimiter_index = strstr(str1,"-");
if(delimiter_index==NULL)
{
printf("%s",str1); //prints last token
break;
}
token = malloc(delimiter_index-previous_delimiter_index+1);
memset(token,'\0',delimiter_index-previous_delimiter_index+1));
strncpy(token,str1,(delimiter_index-previous_delimiter_index));
printf("%s\n",token);
parsed_buffer_length = (int)(parsed_buffer_length+delimiter_index-previous_delimiter_index+1);
previous_delimiter_index = delimiter_index+1;
free(token);
}
}
這給出了輸出:
MyID
MyName
MyAddress
MyNumbers
MyAlias
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.