首页 > 解决方案 > C中的字符串标记化

问题描述

我正在尝试使用strtokC 中的字符串来标记字符串。由于字符串有多个分隔符,我使用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整体服用:吗?我需要连接或类似的东西吗?

谢谢你。

标签: c

解决方案


问题是strtok使用第二个参数作为 标记化的集合。因此,字符串将在空格斜杠上" /"进行标记。不是完整的字符串。' ' '/'

这意味着name将指向单个字符串"Mustafa",同时phone指向"Baki"note1指向"Phone:123456789"

您应该最初"/"调用strtok. 然后,如果需要,去除字符串中的尾随空格。


推荐阅读