读书人

字符串删除有关问题

发布时间: 2012-05-29 12:16:00 作者: rapoo

字符串删除问题

C/C++ code
string s2 = "/home/abc/a/b/b.c";

怎样把 ‘/home/abc/’ 删掉。
linux下 g++ 请尽量简单

[解决办法]
C/C++ code
[User:root Time:21:35:02 Path:/home/liangdong/c]$ ./output path_erase(/home/abc/a/b/b.c, 0) return 0, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 1) return 0, path abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 2) return 0, path a/b/b.cpath_erase(/home/abc/a/b/b.c, 3) return 0, path b/b.cpath_erase(/home/abc/a/b/b.c, 4) return 0, path b.cpath_erase(/home/abc/a/b/b.c, 5) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 6) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 7) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 8) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 9) return -1, path /home/abc/a/b/b.c[User:root Time:21:35:03 Path:/home/liangdong/c]$ cat src/main.c #include <stdio.h>#include <stdlib.h>#include <string.h>int path_erase(char *path, int num) {        if (num < 0) {                return -1;        } else if (num == 0) {                return 0;        }        int len = strlen(path);        char *begin = path;        if (strncmp(path, "./", 2) == 0) {                begin += 2;        } else if (strncmp(path, "/", 1) == 0) {                begin += 1;        }        int i;        int cnt = 0;        for (i = 0; *begin != '\0' && cnt != num; ++ begin) {                if (*begin == '/') {                        ++ cnt;                }        }        if (cnt == num) {                if (*begin != '\0') {                        int left = len - (begin - path);                        memmove(path, begin, left);                        path[left] = '\0';                        return 0;                } else {                        path[0] = '\0';                        return 0;                }        }        return -1; //没有num级目录}int main(int argc, char* const argv[]) {        char str[] = "/home/abc/a/b/b.c";        char *dup = strdup(str);        int i = 0;        for ( ; i != 10; ++ i) {                int ret = path_erase(dup, i);                printf("path_erase(%s, %d) return %d, path %s\n", str, i, ret, dup);                strcpy(dup, str);        }        free(dup);        return 0;} 

读书人网 >C++

热点推荐