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)