C 用strtok\u r进行字符串解析

C 用strtok\u r进行字符串解析,c,strtok,string-parsing,C,Strtok,String Parsing,我的字符串如下所示: abcd "efgh [data\]" pqrl 12fgd] 我想解析到“]”,它不是由反斜杠“\”进行的 我可以用strtok\u r吗?如果不是,我该怎么做?strtok在要搜索的集合中搜索任何单个字符。您可以在]上拆分,然后检查哪些字符具有前一个\但不能使用它搜索正则表达式。strtok搜索要搜索的集合中的任何单个字符。您可以在]上拆分,然后检查哪些具有前一个\但无法使用它搜索正则表达式。您可以使用strchr来执行此操作。以下是我将如何尝试(未经测试): 您可以

我的字符串如下所示:

abcd "efgh [data\]" pqrl 12fgd]
我想解析到“]”,它不是由反斜杠“\”进行的


我可以用strtok\u r吗?如果不是,我该怎么做?

strtok在要搜索的集合中搜索任何单个字符。您可以在]上拆分,然后检查哪些字符具有前一个\但不能使用它搜索正则表达式。

strtok搜索要搜索的集合中的任何单个字符。您可以在]上拆分,然后检查哪些具有前一个\但无法使用它搜索正则表达式。

您可以使用
strchr
来执行此操作。以下是我将如何尝试(未经测试):


您可以使用
strchr
来完成。以下是我将如何尝试(未经测试):


使用
strtok\u r
进行此操作没有一次性方法。由于分隔符是单个字符,如果strtok\u r返回的标记的最后一个字符是“\”,则始终可以通过填充分隔符来重构所需的字符串

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

int main()
{
  char str[] = "abcd \"efgh [data\\]\" pqrl 12fgd]";
  char *tokens[2] = {0};
  char *pToken = str;
  unsigned int i = 0;

  for( tokens[i] = strtok_r( str, "]", &pToken ); ++i < 2; 
    tokens[i] = strtok_r( NULL, "]", &pToken ) ) {
  }

  for( i = 0; i < 2; ++i ) {
    printf( "token %d = %s\n", i, tokens[i] );
  }

  for( i = 0; i < 2; ++i ) {
    if( tokens[i][strlen(tokens[i]) - 1] == '\\' ) {
      tokens[i][strlen(tokens[i])] = ']';
    }
  }

  printf( "output = %s\n", str );

  return 0;
}

使用
strtok\u r
进行此操作没有一次性方法。由于分隔符是单个字符,如果strtok\u r返回的标记的最后一个字符是“\”,则始终可以通过填充分隔符来重构所需的字符串

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

int main()
{
  char str[] = "abcd \"efgh [data\\]\" pqrl 12fgd]";
  char *tokens[2] = {0};
  char *pToken = str;
  unsigned int i = 0;

  for( tokens[i] = strtok_r( str, "]", &pToken ); ++i < 2; 
    tokens[i] = strtok_r( NULL, "]", &pToken ) ) {
  }

  for( i = 0; i < 2; ++i ) {
    printf( "token %d = %s\n", i, tokens[i] );
  }

  for( i = 0; i < 2; ++i ) {
    if( tokens[i][strlen(tokens[i]) - 1] == '\\' ) {
      tokens[i][strlen(tokens[i])] = ']';
    }
  }

  printf( "output = %s\n", str );

  return 0;
}
那些愚蠢的“你尝试了什么”的评论在哪里?那些愚蠢的“你尝试了什么”的评论在哪里?
token 0 = abcd "efgh [data\
token 1 = " pqrl 12fgd
output = abcd "efgh [data\]" pqrl 12fgd