C 编程 - Space 未检测到字符
C Programming - Space Character Not Detected
这里主要是Java/Python编码员。我正在为一项任务编写分词器。 (我明确地不能使用 strtok()
。)下面的代码旨在将文件文本分成词位(又名单词和显着字符)。
char inText[256];
fgets(inText, 256, inf);
char lexemes[256][256];
int x = 0;
char string[256] = "[=11=]";
for(int i=0; inText[i] != '[=11=]'; i++)
{
char delims[] = " (){}";
char token = inText[i];
if(strstr(delims, &inText[i]) != NULL)
{
if(inText[i] == ' ') // <-- Problem Code
{
if(strlen(string) > 0)
{
strcpy(lexemes[x], string);
x++;
strcpy(string, "[=11=]");
(*numLex)++;
}
}
else if(inText[i] == '(')
{
if(strlen(string) > 0)
{
strcpy(lexemes[x], string);
x++;
strcpy(string, "[=11=]");
(*numLex)++;
}
strcpy(lexemes[x], &token);
x++;
(*numLex)++;
}
else
{
strcpy(lexemes[x], &token);
x++;
(*numLex)++;
}
}
else
{
strcat(string, (char[2]){token});
}
}
出于某种奇怪的原因,我的代码无法将 space 字符识别为 ' '
、32
或使用 isspace()
。没有错误信息,我已经确认代码到达文中的space。
这让我发疯。有人知道这里发生了什么吗?
您使用的函数 strstr
不正确。
if(strstr(delims, &inText[i]) != NULL)
函数在字符串" (){}"
.
中精确搜索指针表达式&inText[i]
指向的字符串
相反,您需要使用另一个函数 strcspn
。
类似
i = strcspn( &inText[i], delims );
或者你可以引入另一个变量,例如
size_t n = strcspn( &inText[i], delims );
取决于您要遵循的处理逻辑。
或者更可能您需要使用函数 strchr
like
if(strchr( delims, inText[i]) != NULL)
这里主要是Java/Python编码员。我正在为一项任务编写分词器。 (我明确地不能使用 strtok()
。)下面的代码旨在将文件文本分成词位(又名单词和显着字符)。
char inText[256];
fgets(inText, 256, inf);
char lexemes[256][256];
int x = 0;
char string[256] = "[=11=]";
for(int i=0; inText[i] != '[=11=]'; i++)
{
char delims[] = " (){}";
char token = inText[i];
if(strstr(delims, &inText[i]) != NULL)
{
if(inText[i] == ' ') // <-- Problem Code
{
if(strlen(string) > 0)
{
strcpy(lexemes[x], string);
x++;
strcpy(string, "[=11=]");
(*numLex)++;
}
}
else if(inText[i] == '(')
{
if(strlen(string) > 0)
{
strcpy(lexemes[x], string);
x++;
strcpy(string, "[=11=]");
(*numLex)++;
}
strcpy(lexemes[x], &token);
x++;
(*numLex)++;
}
else
{
strcpy(lexemes[x], &token);
x++;
(*numLex)++;
}
}
else
{
strcat(string, (char[2]){token});
}
}
出于某种奇怪的原因,我的代码无法将 space 字符识别为 ' '
、32
或使用 isspace()
。没有错误信息,我已经确认代码到达文中的space。
这让我发疯。有人知道这里发生了什么吗?
您使用的函数 strstr
不正确。
if(strstr(delims, &inText[i]) != NULL)
函数在字符串" (){}"
.
&inText[i]
指向的字符串
相反,您需要使用另一个函数 strcspn
。
类似
i = strcspn( &inText[i], delims );
或者你可以引入另一个变量,例如
size_t n = strcspn( &inText[i], delims );
取决于您要遵循的处理逻辑。
或者更可能您需要使用函数 strchr
like
if(strchr( delims, inText[i]) != NULL)