从由“/”分隔的一系列字符串中删除最后一个字符串

时间:2014-08-24 10:37:38

标签: c

我正在尝试存储最后一次出现的字符串。但是strrchr - 获取我们正在搜索的角色的最后一次出现。

#include<stdio.h>
#include<string.h>
int main(){
        char* str = "/angus/declan/";
        char* str1 = "dir1/";
        char* str2 = "/clington";
        char* lname,*lname1,*lname2;
        lname = strrchr(str,'/');
        lname1 = strrchr(str1,'/');
        lname2 = strrchr(str2,'/');
        printf("\n lname : %s lname1 : %s lname2 : %s \n",lname,lname1,lname2);
        return 0;
}

o / p:

lname : / lname1 : / lname2 : /clington

但我想打印上面的Declan,dir1,clington而不是“/”之前或之后。

1 个答案:

答案 0 :(得分:1)

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

char *last(const char *s, char sep){
    char *tmp = strdup(s);
    char *ret, *p = strrchr(tmp, sep);
    if(p){
        if(p[1]){
            ret = strdup(p+1);
        } else {
            *p = '\0';
            p = strrchr(tmp, sep);
            ret = strdup(p ? p+1 : tmp);
        }
        free(tmp);
        return ret;
    }
    return tmp;
}

int main(){
    char *str = "/angus/declan/";
    char *str1 = "dir1/";
    char *str2 = "/clington";
    char* lname,*lname1,*lname2;
    lname  = last(str, '/');
    lname1 = last(str1, '/');
    lname2 = last(str2, '/');
    printf("\n lname : %s, lname1 : %s, lname2 : %s \n",lname,lname1,lname2);
    free(lname);free(lname1);free(lname2);
    return 0;
}