2012-04-26 7 views
1

私は、次の1のようにすることができますのconstのchar *変数「STR」を持っている:名前空間stdとstringライブラリを使用せずにconst char *を分割して格納する方法は?

const char* str ="/v1/AUTH_abb52a71-fc76-489b-b56b-732b66bf50b1/images/bhs"; 

私はこのstr変数を分割し、char a[256]のようなものである配列に格納する必要があります。しかし、すべてのスラッシュ(/)を検出することで分割したい。私はv1AUTH_abb52a71-fc76-489b-b56b-732b66bf50b1などを保存したいということです。問題はこのプロジェクトでは文字列ライブラリと名前空間stdを使用できないため、istringstreamを使用できません。私はstring.hstdio.hしか使用できません。では、どうすればこの制限内で対応できますか?

+2

からの抜粋コード[用途はstrtok](http://www.cplusplus.com/reference/clibrary/cstring/strtok/) – Mahesh

+2

だから、これはC++の質問ではないのですか? –

+0

C++の 'std :: string'関数も使うことができます。また、C++にどのようにタグ付けされているかを見ることもできます。 – chris

答えて

3
const char* yourStr; 
    char str[1000]; 
    strncpy(str, yourStr, sizeof(str)); 
    char* parts[100] = {0}; 
    unsigned int index = 0; 
    parts[index] = strtok(str,"/"); 

    while(parts[index] != 0) 
    { 
    ++index; 
    parts[index] = strtok(0, "/"); 
    }   
+0

ありがとうございます:D –

6

strcpy()、次にstrtok()。

または、配列を反復処理することで、本当に基本的なやり方です。

この宿題はありますか?

+0

ええ、宿題の一種。 –

1

文字列をトークンに分割するstrtok関数を使用できます。 «/»値で«delim»を設定することができます。

+0

ありがとうございます。 –

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


int main() 
{ 
    char str [] ="/v1/AUTH_abb52a71-fc76-489b-b56b-732b66bf50b1/images/bhs"; 

    char* token_pointer; 
    token_pointer = strtok(str, "/"); 

    while(NULL != token_pointer) 
    { 
      //handle your token 
     printf("%s \n", token_pointer); 
     token_pointer = strtok(NULL, "/");  
    } 

    return 0; 
} 

それを実行します。コンソールを確認してください。

希望すると助かります!

乾杯;)

+0

それは助けます:D.Thanks –

1

同様のポストstrtok - how avoid new line to and put to array of strings?は、あなたが通過する場合は、偉大な答えを見つけるでしょう、があります。

#include <stdlib.h> 
#include <string.h> 
... 
void split(char *str, char **splitstr) 
{  
    char *p;  
    int i=0;  

    p = strtok(str,",");  
    while(p!= NULL)  
    {     
    printf("%s", p); 
    splitsr[i] = malloc(strlen(p) + 1); 
    if (splitstr[i]) 
     strcpy(splitstr[i], p); 
    i++; 
    p = strtok (NULL, ",");  
    } 
} 
関連する問題