Home > Enterprise >  C Programming - Space Character Not Detected
C Programming - Space Character Not Detected

Time:03-15

Mainly a Java/Python coder here. I am coding a tokenizer for an assignment. (I explicitly cannot use strtok().) The code below is meant to separate the file text into lexemes (aka words and notable characters).

char inText[256];
fgets(inText, 256, inf);

char lexemes[256][256];
int x = 0;

char string[256] = "\0";
for(int i=0; inText[i] != '\0'; 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, "\0");
                (*numLex)  ;
            }
        }
        else if(inText[i] == '(')
        {
            if(strlen(string) > 0)
            {
                strcpy(lexemes[x], string);
                x  ;
                strcpy(string, "\0");
                (*numLex)  ;
            }
            strcpy(lexemes[x], &token);
            x  ;
            (*numLex)  ;
        }
        else
        {
            strcpy(lexemes[x], &token);
            x  ;
            (*numLex)  ;
        }
    }
    else
    {
        strcat(string, (char[2]){token});
    }
}

For some odd reason, my code cannot recognize the space character as ' ', as 32, or by using isspace(). There are no error messages, and I have confirmed that the code is reaching the space in the text.

This is driving me insane. Does anyone have any idea what is happening here?

CodePudding user response:

You are using the function strstr incorrectly.

if(strstr(delims, &inText[i]) != NULL)

the function searches exactly the string pointed to by the pointer expression &inText[i] in the string " (){}".

Instead you need to use another function that is strcspn.

Something like

i = strcspn( &inText[i], delims );

or you can introduce another variable like for example

size_t n = strcspn( &inText[i], delims );

depending on the logic of the processing you are going to follow.

Or more probably you need to use the function strchr like

if(strchr( delims, inText[i]) != NULL)
  • Related