删除数组中特定字符之前的所有字符

时间:2013-03-26 03:57:40

标签: c arrays

说我有以下代码:

char url[63] = {'\0'};
scanf("%s", url);

要求用户提交网址。我需要删除通常位于url开头的字符,例如http://,ftp://等...

我可以使用for循环检查字符数组中是否存在“://”:

 int i;
 for (i=0;i<strlen(url);i++) {
     if (url[i] == ':' && url[i+1] == '/' && url[i+2] == "/") {
        // Super cool code here... 
     }
 }

但是说我想删除://以及之前的所有内容?我怎么做到这一点?因此,如果用户输入:

  

http://www.google.com

输出结果为:

  

www.google.com

如果使用了ftp://,则会得到类似的结果。

3 个答案:

答案 0 :(得分:1)

您只需要:

int i;
 for (i=0;i<strlen(url) - 2;i++) {
     if (url[i] == ':' && url[i+1] == '/' && url[i+2] == '/') {
        // Super cool code here... 
        return &url[i+3];  
     }
 }

创建副本:

char* getInteresting(char* url)
{
    int i = 0;
    for (i=0;i<strlen(url) - 2;i++) {
        if (url[i] == ':' && url[i+1] == '/' && url[i+2] == '/') {
            // Super cool code here... 
            int len = strlen(url) - (i+2);
            char* copy = (char*)malloc(len + 1);
            strcpy(copy, url + i + 3);
            return copy;  
        }
    }
}

另外:通过错误案例进行更多检查!

答案 1 :(得分:1)

通常在C中执行此类操作的最简单方法是根本不实际更改原始数组,而是创建另一个char *指针,指向您实际关注的字符串的第一部分。所以....

 int i;
 char *interesting_stuff;
 for (i=0;i<strlen(url);i++) {
     if (url[i] == ':' && url[i+1] == '/' && url[i+2] == "/") {
        interesting_stuff = url + i + 3;
     }
 }

然后继续使用interesting_stuff执行操作并单独留下url。 (请注意,它是指向同一数组的指针,因此如果您覆盖url,您也将失去interesting_stuff。)

顺便说一下,for循环的界限会让你遇到麻烦。您可能会在字符串末尾看到两个字符,而我的修改会使问题变得更糟。您需要首先检查字符串的长度,并确保没有超过字符串中的://后面有一些有用数据的点。换句话说,您希望将循环约束为strlen(url) - 4,除非url短于4个字符,否则请小心。

答案 2 :(得分:0)

const char* ssc = strstr(url, "//:");
if (ssc)
{
   const char* withoutProtocol = ssc + 3;
   // do something with withoutProtocol
}