【发布时间】:2016-02-28 07:03:35
【问题描述】:
我的代码有问题,需要您的帮助!我需要做的是编写一个函数,该函数将从输入的字符串中提取以www. 开头并以.edu 结尾的网址。输入的字符串中没有空格,所以scanf() 应该可以在这里正常工作。
例如:http://www.school.edu/admission。提取的地址应为www.school.edu。
这是我目前想出的,显然没有用,遗憾的是我想不出别的了。
void extract(char *s1, char *s2) {
int size = 0;
char *p, *j;
p = s1;
j = s2;
size = strlen(s1);
for(p = s1; p < (s1 + size); p++) {
if(*p == 'w' && *(p+1) == 'w' && *(p+2) == 'w' && *(p+3) == '.'){
for(p; p < (p+4); p++)
strcat(*j, *p);
}
else if(*p=='.' && *(p+1)=='e' && *(p+2)=='d' && *(p+3)=='u'){
for(p; (p+1) < (p+4); p++)
strcat(*j, *p);
}
}
size = strlen(j);
*(j+size+1) = '\0';
}
函数必须使用指针运算。我得到的错误与不兼容的类型和强制转换有关。先谢谢了!
【问题讨论】:
-
请在问题中包含 full 错误消息。这对我们有很大帮助。
-
将
char数据传递给strcat()不是一个好主意。 -
p < (p+4)和(p+1) < (p+4)如果已定义,则始终为真。 -
这无害,但
p作为for的初始化部分是没有意义的。 -
这里有几个问题: 1:你的内部 for 循环是无限的 2- strcat 期望类似 strcat(j,p) 而不是 strcat(*j,*p)。 3-即使您将代码放在我的第二点中,这在语义上也是不正确的 4-您正在做的这件事可以通过 POSIX 库中的正则表达式来完成,您可以在这里找到一个工作示例:stackoverflow.com/questions/1085083/…跨度>