2011-10-25 19 views
1

文字列を区切り文字で区切ることができるC言語の関数はありますか?私は文字C - 文字列を分割する

char ch[2][10]; 

または2つの異なる変数

char ch1[10], ch2[10]; 
への2次元配列に「コマンド」と「コンテキスト」を格納したい、今すぐ

"Command:Context" 

:私は、文字列を持っていると言います

ループを使ってみましたがうまくいきます。すでに存在している機能があるのであれば私は興味がありますが、私は車輪を再構築したくありません。明確な例を提供してください、ありがとうございます!

答えて

6

あなたはstrtok

Online Demo使用することができます。

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] ="Command:Context"; 
    char * pch; 
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str,":"); 
    while (pch != NULL) 
    { 
     printf ("%s\n",pch); 
     pch = strtok (NULL, ":"); 
    } 
    return 0; 
} 

出力:あなたは、次のサンプルあたりとしてstrtokで文字列をtokeniseでき

Splitting string "Command:Context" into tokens: 
Command 
Context 
+1

ブラッディFGITW。 :) –

+0

この記事の例はありません。してください、私を案内してください:( – dpp

+0

@ domanokz:追加、Hth! –

2

#include <stdio.h> 
#include <string.h> 

int main (void) { 
    char instr[] = "Command:Context"; 
    char words[2][10]; 
    char *chptr; 
    int idx = 0; 

    chptr = strtok (instr, ":"); 
    while (chptr != NULL) { 
     strcpy (words[idx++], chptr); 
     chptr = strtok (NULL, ":"); 
    } 

    printf ("Word1 = [%s]\n", words[0]); 
    printf ("Word2 = [%s]\n", words[1]); 

    return 0; 
} 

出力:

Word1 = [Command] 
Word2 = [Context] 

strtok機能は、おそらくのために気をつけたいいくつかのマイナーな落とし穴があります。主に、文字列自体を変更して魔法を編成するので、文字列リテラル(たとえば)では機能しません。