最后指定出现的"特殊"签字+ C.

时间:2014-11-17 19:19:51

标签: c string split

我在C中有一个字符串(路径名),我需要从字符串中删除最后一个/ ....

  

Ex:home / usr / bin / ls

     

通缉结果:home / usr / bin

说实话,我似乎无法想办法做到这一点。我试过strtok()但是这会从分隔符的第一次出现时拆分字符串,我只需要在" /"的最后一次出现之后删除文本。如果有人对C中的方法有任何指示可以帮助我,我将非常感激。

3 个答案:

答案 0 :(得分:1)

使用strrchr

此处最大字符串长度为50个字节。

int main()
{
    char s1[50];
    printf("enter your string\n");
    fgets(s1, 50, stdin);
    char *p;
    p=strrchr(s1, '/');
    if(p)
        *p='\0';
    printf("output is %s\n",s1);
    return 0;
}

答案 1 :(得分:0)

循环strtok直到找不到/,然后在先前找到/

时拆分

或者,在这种特殊情况下尝试使用dirname()函数

答案 2 :(得分:0)

有许多方法可以做到这一点。最简单的方法之一是使用strrchr查找路径中最后一次出现的'/'并将其设置为null(即将其设为新的end of string):

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

int main () {

    char mypath[] = "home/usr/bin/ls";

    char *p = strrchr (mypath, '/');            /* find last '/' in mypath */

    *p = 0;                                     /* set as null-termination */

    printf ("\n mypath : %s\n\n", mypath);      /* print it */

    return 0;
}

<强>输出:

$ ./bin/trimpath

mypath : home/usr/bin

另一种方法是找到mypath的长度(即size_t len = strlen (mypath);),然后使用指针,递减指针mypath + len -1,直到找到/并设置{{ 1}}到/

null