2017-01-04 1 views
0

strtokまたは他の文字列関数を使用して、最後の区切り文字が見つかるまで文字列を切り取ることは可能ですか?最後の区切り文字が見つかるまで文字列を保存する - C

特定の例は、日付です。私は「4.1.2017」を変えたいと思います。 "4.1.2017"に - 最後にドットなし。

+0

コメントとして、 'strtok'は' strsep'によって廃止されましたが、 'strtok'を' strtok_r'をスレッドセーフで再入可能として使う価値があることに注目しておきましょう。 –

+2

私の質問は、なぜ複雑な関数を使って最後にドットを削除するのですか?その仕事の可能性のある合併症について詳しく説明できますか? – yakoudbz

+0

ファイルの取り扱い、文字列の操作と構造の対象に触れる課題です。ファイルからデータをスキャンして操作し、別のファイルに出力することが期待されています。 私はそれが愚かであることに同意しますが、私たちはそれを評価するサーバー上にコードをアップロードしなければならず、その形式で書かなければなりません。 – 5arg

答えて

2

あなたは、単一の区切り文字を持っている場合は、文字列内の最後の出現を見つけるためにstrrchrを使用します。

char str[] = "quick.brown.fox"; 
char *ptr = strrchr(str, '.'); 
if (ptr) { 
    *ptr = '\0'; 
} 
printf("%s\n"' str); 

このproduces the following output

quick.brown 
0

あなたはドン場合、私は」(私のコメントで説明したと同様tはstrrchrを使用したい、または何らかの理由でできない)このような区切り文字の位置をチェックする関数を作成します。

int my_strrchr(const char *ptr, const char delimiter){ 
    if (ptr == NULL){ 
     printf("Error, NULL Pointer\n"); 
     return -1; 
    } 

    if (*ptr == '\0'){ 
     printf("Error, the Buffer is Empty\n"); 
     return 0; 
    } 

    int i = 0; 
    int ret = 0; 

    while(ptr[i] != '\0'){ 
     if (ptr[i] == delimiter){ 
      ret = i; 
     } 
     i++; 
    } 

    return ret; 
} 

そして、このようにそれを使用します。

#include <stdio.h> 

int main(void){ 
    char arr[] = "4.1.2017."; 
    char delimiter = '.'; 

    int len; 

    if((len = my_strrchr(arr, delimiter)) > 0){ 
     while (arr[len] != '\0'){ 
      arr[len] = '\0'; 
     } 
     printf("%s\n", arr); 
    } 
} 

DEMOを参照してください。 これはどのような方法でもあなたにアイデアを得ることだけであり、あなたが見ることができるように私は標準機能を使用しません。

関連する問題