我有以下字符串:"http://www.google.ie/"
。我想创建一个字符串"www.google.ie"
我如何在C中执行此操作?这是我到目前为止所尝试的内容:
char* url="http://www.google.ie/";
char* url_stripped=NULL;
char* out=strtok(url,"http://");
while(out){
out=strtok(0,".");
url_stripped=out;
break;
}
printf("%s\n",url_stripped);
但它不起作用。我也担心,如果我有一个包含'h','t','t'或'p'的网址,那么事情就会搞砸了。
我还需要能够从头开始规定“https://”。
答案 0 :(得分:3)
C库为您提供了很多功能! 所以,开始的建议是在这里看看:http://www.cplusplus.com/reference/clibrary/cstring/所以你可以选择适合你需要的功能。 而不是重新发明算法,我建议你已经有了! 干得好!
答案 1 :(得分:1)
您应该使用/
进行标记char url[]="http://www.google.ie/";
char* url_stripped=strtok(url,"/");
url_stripped=strtok(NULL,"/");
printf("%s\n",url_stripped);
答案 2 :(得分:1)
如何检查字符串是以"http://"
还是"https://"
开头,然后跳过七个或八个字符,然后搜索第一个'/'
?
char *url="http://www.google.ie/";
char *tmp = url;
char *stripped_url;
if (strncmp(tmp, "http://", 7) == 0 || strncmp(tmp, "https://", 8) == 0)
tmp += (tmp[4] == 's') ? 8 : 7; /* Skip over the "http://" or "https://" */
char *slash = strchr(tmp, '/');
if (slash != NULL)
stripped_url = strndup(tmp, slash - tmp); /* slash-tmp is the length between start of the string and the slash */
else
stripped_url = strdup(tmp);
printf("domain name = \"%s\"\n", strupped_url);
free(stripped_url);
答案 3 :(得分:1)
实际上有很多方法可以做到这一点。你没有真正指出代码应该做什么一般。在中,你想在这个字符串中隔离什么: “http://stackoverflow.com/questions/8387669/c-beginner-split-a-string/”
无论如何,如果您只想丢失“http://”和最后一个“/”,我建议您使用此代码:
char url[] = "http://www.google.ie/";
char url_stripped[100];
sscanf(url, "http://%s", url_stripped);//get new string without the prefix "http://"
url_stripped[strlen(url_stripped)-1] = '\0';//delete last charactar (replace with null terminator)
printf("%s\n",url_stripped);
“sscanf”功能在这种情况下非常方便。它的工作原理很像“fscanf”和“scanf”,但输入是字符串。 至于“char url_stripped [100];”这一行确保你有足够的空间或使用malloc(strlen(url)+1);和free();当你不再需要字符串时。
答案 4 :(得分:1)
我有以下字符串:“http://www.google.ie/”我想创建 字符串“www.google.ie”
您可以这样做(代码更少,速度更快):
#define protocol "http://"
#define host "www.google.ie"
#define slash "/"
// "http://www.google.ie/"
printf("Whole string: %s\n", protocol host slash);
// "www.google.ie"
printf("URL only: %s\n", host);
简单,对吧?
答案 5 :(得分:1)
可能的后期解决方案:
const char* PROTOCOLS[] = { "http://", "https://", 0 };
char* url_stripped = 0;
const char* protocol;
char* url = *(a_argv + 1);
for (size_t i = 0; 0 != PROTOCOLS[i]; i++)
{
protocol = strstr(url, PROTOCOLS[i]);
if (protocol == url) /* Ensure starts with and not elsewhere. */
{
const char* first_fwd_slash;
protocol += strlen(PROTOCOLS[i]);
first_fwd_slash = strchr(protocol, '/');
if (0 == first_fwd_slash)
{
url_stripped = strdup(protocol);
}
else
{
const size_t size = first_fwd_slash - protocol + 1;
url_stripped = malloc(sizeof(char) * size);
memcpy(url_stripped, protocol, size - 1);
*(url_stripped + size - 1) = 0;
}
break;
}
url_stripped = 0;
}
if (0 != url_stripped)
{
printf("[%s]\n", url_stripped);
free(url_stripped);
}
答案 6 :(得分:1)
char* url="http://www.google.ie/";
char* url_stripped;
strcpy(url_stripped,url+7);
printf("%s\n",url_stripped);