2013-03-26 47 views
0
之前删除特定字符的所有字符

说我有以下代码:在阵列

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

而且要求用户提交的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:/ /被使用。

+0

您可以尝试访问您尚未分配的部分内存。你只需要去stlin(url)-2 – DiegoNolan 2013-03-26 04:01:19

+0

http://whathaveyoutried.com – 2013-03-26 04:06:25

+0

我能想到的唯一的事情就是将字符分配给\ 0,但这显然不会起作用,因为它消除了以后的所有内容好吧.. – codedude 2013-03-26 04:07:46

回答

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; 
     } 
    } 
} 

加:很多更多的是通过错误的情况下检查!

+0

你不是指return&url [i + 3]? – HairOfTheDog 2013-03-26 04:03:27

+0

是的,已经更正。 – Keith 2013-03-26 04:03:42

+0

说我想设置修改后的url []数组等于一个新的数组......这将如何工作? – codedude 2013-03-26 04:05:00

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循环的界限会给你带来麻烦。你可能会看到字符串末尾的两个字符,而我的修改会使问题变得更糟。您需要首先检查字符串的长度,并确保您不会超过字符串中的位置,其中://后面跟着一些有用的数据。换句话说,如果url短于4个字符,则要谨慎使用strlen(url) - 4,除非要小心。

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