0

私はスティングをトークン化しようとしていますが、これが私の試みです。

char new_str[1024];
void tokenize_init(const char str[]){//copy the string into global section
  strcpy(new_str,str);
}

int i = 0;
char *tokenize_next() {
  const int len = strlen(new_str);
  for(; i <= len; i++) {
  if ( i == len) {
  return NULL;
  }
  if ((new_str[i] >= 'a' && new_str[i] <= 'z') ||
   (new_str[i] >= 'A' && new_str[i] <= 'Z')) {
   continue;
   }else { 
   new_str[i] = '\0'; 
   i = i + 1;
   return new_str;
   }
 }
  return NULL;
}

//main function
int main(void) {
  char sentence[] = "This is a good-sentence for_testing 1 neat function.";
  printf("%s\n", sentence);
  tokenize_init(sentence);
  for (char *nt = tokenize_next(); 
   nt != NULL; 
   nt = tokenize_next())
printf("%s\n",nt);
}

ただし、文の最初の単語 (「This」) を出力して停止します。誰かが理由を教えてもらえますか? 私の推測では、私の new_str は永続的ではなく、メイン関数が tokenize_next() を呼び出すと、new_str は文の最初の単語になります。前もって感謝します。

4

1 に答える 1