例如,要验证有效的Url,我想执行以下操作
char usUrl[MAX] = "http://www.stackoverflow"
if(usUrl[0] == 'h'
&& usUrl[1] == 't'
&& usUrl[2] == 't'
&& usUrl[3] == 'p'
&& usUrl[4] == ':'
&& usUrl[5] == '/'
&& usUrl[6] == '/') { // what should be in this something?
printf("The Url starts with http:// \n");
}
或者,我考虑过使用strcmp(str, str2) == 0
,但这一定非常复杂。
是否有标准的C函数可以做这样的事情?
答案 0 :(得分:32)
bool StartsWith(const char *a, const char *b)
{
if(strncmp(a, b, strlen(b)) == 0) return 1;
return 0;
}
...
if(StartsWith("http://stackoverflow.com", "http://")) {
// do something
}else {
// do something else
}
您还需要#include<stdbool.h>
或只需将bool
替换为int
答案 1 :(得分:8)
我会建议:
char *checker = NULL;
checker = strstr(usUrl, "http://");
if(checker == usUrl)
{
//you found the match
}
仅当字符串以'http://'
开头而不是'XXXhttp://'
如果您的平台上有strcasestr
,也可以使用{{1}}。
答案 2 :(得分:1)
使用显式循环的解决方案:
#include <stdio.h>
#include <stddef.h>
#include <stdbool.h>
bool startsWith(const char *haystack, const char *needle) {
for (size_t i = 0; needle[i] != '\0'; i++) {
if (haystack[i] != needle[i]) {
return false;
}
}
return true;
}
int main() {
printf("%d\n", startsWith("foobar", "foo")); // 1, true
printf("%d\n", startsWith("foobar", "bar")); // 0, false
}
答案 3 :(得分:0)
strstr(str1, "http://www.stackoverflow")
是另一个可用于此目的的函数。
答案 4 :(得分:0)
以下内容应检查usUrl是否以“http://”开头:
strstr(usUrl, "http://") == usUrl ;