C初学者:分裂一个字符串

时间:2011-12-05 15:28:41

标签: c string split

我有以下字符串:"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://”。

7 个答案:

答案 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);