c - C中的字符串标记化
问题描述
我正在尝试使用strtok
C 中的字符串来标记字符串。由于字符串有多个分隔符,我使用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
. 然后,如果需要,去除字符串中的尾随空格。
推荐阅读
- c# - IDE0063 什么时候处理?
- .net - Google Content API - 新版本
- kubernetes - kubernetes pod kube-dns 不断重启
- android - 将输入的像素 uchar4 向量转换为一个 int 值
- c++ - 如何在 JSON 中创建文件层次结构表示
- ruby-on-rails - 将haml-partial传递给控制器变量
- php - 何使用 PEAR DB 从 utf8 编码的 PHP 访问 latin1 编码的数据库
- java - 如何使用jGrapht在有向图中找到从一个顶点到结束顶点的所有路径?
- angularjs - 将 Ng 模型值传递给指令
- jquery - 使具有列搜索的数据表适用于多个表