基于转义字符的字符串解析

时间:2013-10-15 05:33:17

标签: c++ c parsing

我正在尝试解析以下字符串:

"USBSTOR\DISK&VEN_JETFLASH&PROD_TRANSCEND_8GB&REV_1100\00H8096XQ9UW1BQ5&0:JetFlash Transcend 8GB USB Device"

基于'\'(字符)

问题1:但此字符被视为转义字符

问题2:字符串中间的\0被视为字符串的结尾。

我尝试了很多方法。

(i)我尝试将'\'替换为'$'等其他字符,并尝试使用sscanf()进行解析但不起作用。

你们可以提出一些建议吗?

#include <string.h>
#include <stdio.h>

int main()
{
    char str[80] = "This is \www.tutorialspoint.com \website";
    const char s[2] = "\\";
    char *token;

    /* get the first token */
    token = strtok(str, s);

    /* walk through other tokens */
    while( token != NULL )
    {
      printf( " %s\n", token );

      token = strtok(NULL, s);
    }

    return(0);
}

2 个答案:

答案 0 :(得分:1)

进行此修改 char str[80] = "This is \\www.tutorialspoint.com \\website";

这样,你的输出是:

This is 
www.tutorialspoint.com 
website

请记住:您在代码中使用的任何字符串文字都需要反斜杠的转义序列。

答案 1 :(得分:1)

请记住转义序列(\\\n\0等)是单个字符。

要在代码本身初始化的字符串中包含\字符,必须在初始化字符串中使用\\

如果您在运行时提供输入,那么您应该使用\(单一反斜杠)进行输入,以这种方式提供输入不会\0视为ASCII-0字符,将被视为\,后跟0(两个字符)。

在您的情况下,您要解析“USBSTOR \ D ...”,您可以将其存储在const字符串中(请记住\\在这种情况下)或通过提供控制台或磁盘文件作为输入(这里你应该使用单\)。

在上述任何一种方式中,当您阅读字符串时,您将获得所需的正确字符,例如,当您阅读或打印时,\\将首先解析为\