strtok
Posted: 2008年7月02日(水) 13:42
いつもお世話になってます。Haruです。Strtokでスペースを区切り文字とし、文字列を分解する作業をしているのですが、スペースのみで入力した場合と、文字列の最後にスペースを入力した場合に、スペースを読み込んでしまうんですが、読み込まないようにするにはどうすればよいのでしょうか?私が考えている原因としては、上の二つの場合だと、スペースがNULLにかえってない(?)からだと思うのですが・・・。良い対処法を教えてください。お願いします。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
int i,c = 0;
int argc;
int sentou = 0;
char *argv[256];
char *tp;
char str[256];
while((str[c++] = getchar()) != '\n'); /* 改行まで読み込み */
puts(str);
tp = strtok(str," "); /* 文字列strをスペースごとの字句(トークン)に分ける。一度目は分解対象の文字列を指定 */
i = 0;
printf("[%d] = [%s] \n",i,tp); /* i = 回数 tP = スペースで分解した文字列strの1番目 */
i = 1; /* 0は既に表示しているので1から */
while(tp != NULL) /* tp = NULLでなければループ */
{
tp = strtok(NULL," "); /* 2度目以降はNULLを指定 */
if((tp != NULL) && (tp != " ")) /* もしtp = NULLでなければ */
{
printf("[%d] = [%s] \n",i,tp);
i++;
}
}
printf(" %d \n",i);
return 0;
}