我试图在c中使用strtok
标记字符串。由于字符串有多个分隔符,我使用strtok
,但是如果它们有空白,则无法标记字符串。
的例子:
String to tokenize: Name:Mustafa Baki /Phone:123456789 /Note:real
char *name = strtok(line," /");
char *phone = strtok(NULL, " /");
char *note1 = strtok(NULL," /");
//tokenize name
name = strtok(name, ":");
name = strtok(NULL, ":");
//tokenize phone number
phone = strtok(phone, ":");
phone = strtok(NULL, ":");
//tokenize note
note1 = strtok(note1, ":");
note1 = strtok(NULL, ":");
printf("Name: %s Phone: %s Note: %s n",name,phone,note1);
打印后我得到的是Name: Mustafa Phone: (null) Note: 123456789
。
由于名称中有空格,它破坏了一切。它只是跳过电话号码,并将其分配给注释。
我怎样才能解决这个问题?是否有可能在分隔符之后将字符串作为一个整体,例如,假设要标记的字符串是Name:Mustafa Baki
。我可以在:
之后把Mustafa Baki
作为一个整体吗?我是否需要串联或类似的东西?
谢谢。
问题是strtok
使用第二个参数作为集合进行标记。因此,字符串" /"
将在空格' '
上标记或在斜杠'/'
上标记。不是完整字符串。
这意味着name
将指向单个字符串"Mustafa"
,而phone
指向"Baki"
,note1
指向"Phone:123456789"
。
在初始调用strtok
时,应该只使用斜杠"/"
。然后,如果需要,去掉字符串中的尾随空格。