문자열을 소문자 혹은 대문자로 일괄 변환하고 싶을 때 아래와 같이 썼다.

    for( j=0;j<( int )strlen( aComStr->tok[i] );j++ )
    {
        if( aComStr->tok[i][j] >= 'A' && aComStr->tok[i][j] <= 'Z' )
        {
            aComStr->tok[i][j] +=32;
        }
    }

하지만 이미 제공되는 함수가 있었다....아래는 그 예제이다.

#include <string.h>

int main()
{
    char str[1024];
    strcpy( str, "Hello World 1234");
    int i;

    printf("before : %s\n", str);
    for (i=0; i< (int)strlen(str); i++)
    {
        str[i]=toupper(str[i]);
    }
    printf("after1 : %s\n", str);
    for (i=0; i< (int)strlen(str); i++)
    {
        str[i]=tolower(str[i]);
    }
    printf("after2 : %s\n", str);
}

문자열 가공 함수로 str로 시작하는 함수 중에 trim 기능이 있을거라 생각했는데 없다.
sscanf를 잘 쓰면 어케 되겠지만...여튼 인터넷을 뒤져보니 대중적인 소스가 있었는데 이걸 수행해 보니 ltrim은 정상 동작하지만 rtrim은 정상 동작하지 않더라...그래서 살짝 수정한 버전이다.

char* rtrim(char* s) 
{
    int i=0;

    for(i=strlen(s)-1;i>=0;i--)
    {
        if(isspace(s[i])) s[i]=0x00; else break;
    }

    return s;
}

char* ltrim(char* s) 
{
    char* i = s;

    while (*i != 0x00)
    {
        if (isspace(*i)) i++;
        else 
        {
            s = i;
            break;
        }
    }

    return s;
}

char* trim(char* s) 
{
    return ltrim(rtrim(s));
}

void main()
{
    char t[]="    AAAA          ";
    char* tt=t;

    printf("SRC [%s]\n", t);
    printf("rtrim [%s]\n", rtrim(tt));
    printf("SRC [%s]\n", t);
    printf("ltrim [%s]\n", ltrim(tt));
    //printf("trim [%s]\n", trim(t));
}

str로 시작하는 문자열 관련 함수가 꽤 있는데 이중에 문자열을 자르는데 유용한 strtok이란 함수가 있다.
아직 parser가 제대로 구현이 안되어 있어 이를 임시로 구현하는데 사용하게 되었다.
예제는 인터넷을 뒤지다가 찾은 것인데 이정도만 봐도 이해하는데 쉬울 것 같다. 출처를 표기해야하는데...까먹었네;
나중에 찾아보고 출처 기입해야함.

#include <STDIO.H>
#include <STRING.H>   //strtok함수는 string.h에 들어있습니다.

int main( )
{
    //분리된 문자열 보관용
    char *token = NULL;
    //분리할 문자열
    char str1[] = "This is\tStrtok,Test Program!!!! end\n";
    //' '이나 ','이나 '\t'이나 '\n'이 들어있는 문자열을 분리
    //구분자 지정
    char str2[] = " ,\t\n!";

    //strtok를 사용시 가장 유의할점은 원본이 손상 된다는 점입니다.
    //strtok에 넣어줄 첫번째 인자는 복사해서 사용하는 것이 좋습니다.

    //처음 토큰을 자른다.
    token = strtok( str1, str2 );
    //이후는 계속 반환된다.
    while( token != NULL )
    {
        //토큰별로 출력
        printf( "token = %s", token );
        //한칸 내리기
        putchar( '\n' );
        //반복해서 자르기. 첫번째 인자를 NULL처리하면 기존에 포인터에서 계속 자르게 됩니다.
        token = strtok( NULL, str2 ); 
    } 

    //strtok사용하고 난후의 원본 문자열이 손상된것을 알수 있습니다.
    printf("검색이 완료된 원본 문자열 : %s\n",str1);

    return 0;
}

문자열에 대해 조건 판단을 위한 함수가 있다.

isalnum() : 문자나 숫자라면 TRUE
isalpha() : 문자이면 TRUE
isacii() : 아스키 문자라면 TRUE
iscntrl() : 제어 문자라면 TRUE
isdigit() : 숫자라면 TRUE
isgraph() : 공백제외하고 인쇄가능한 문자라면 TRUE
isupper() : 대문자라면 TRUE
islower() : 소문자라면 TRUE
[출처] C언어 7|작성자 Ronny

해당 함수를 쓰기 위해서 ctype.h를 참조 해야한다.

임시 parser를 구현하는데 객체의 이름은 숫자로 시작할 수 없다는 제약이 있다고 가정했고 이를 검사하는데 isalpha와 isdigit을 사용했다.
아래 예제는 머 이런식으로 썼다 정도...

if( isdigit( *sToken[j] ) )
{
    j++;
}

가끔 쓸일이 있는데 자꾸 잊어버려서 기억용으로 기재함.
자릿수 지정을 하는 방법은 아래와 같다.

printf ("[%10s]",  argv[0]);
printf ("[%-10s]",  argv[0]);
printf ("[%010s]",  argv[0]);

위의 결과는 아래와 같다.

[      test]
[test      ]
[000000test]

여기서 내가 자꾸 잊어버리는 자릿수 지정을 인자로 하려고 할때이다.
아래와 같이 아스테릭(*)을 주고 뒤에 인자로 숫자를 주면 된다.

printf ("[%*s]", 10, argv[0]);