Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C语言将字符串对分_C_String_Split - Fatal编程技术网

使用C语言将字符串对分

使用C语言将字符串对分,c,string,split,C,String,Split,如何使用C将字符串分成两半?我到处寻找答案,但大多数似乎都是处理空格或其他字符的拆分(例如,)。我只想把一根绳子分成两半。有没有一个简单的方法可以做到这一点 如果您想在适当的位置执行,则不需要。您必须为'\0'字节牺牲一个字符 您需要考虑如何为拆分字符串的第二部分分配内存,并相应地进行编码。如果您想在适当的位置执行,则不需要这样做。您必须为'\0'字节牺牲一个字符 您需要考虑如何为拆分字符串的第二部分分配内存,并进行相应的编码。不,没有简单的方法,它需要几个步骤: 计算字符串的长度 为两部分分配

如何使用C将字符串分成两半?我到处寻找答案,但大多数似乎都是处理空格或其他字符的拆分(例如,)。我只想把一根绳子分成两半。有没有一个简单的方法可以做到这一点

如果您想在适当的位置执行,则不需要。您必须为
'\0'
字节牺牲一个字符


您需要考虑如何为拆分字符串的第二部分分配内存,并相应地进行编码。

如果您想在适当的位置执行,则不需要这样做。您必须为
'\0'
字节牺牲一个字符


您需要考虑如何为拆分字符串的第二部分分配内存,并进行相应的编码。

不,没有简单的方法,它需要几个步骤:

  • 计算字符串的长度
  • 为两部分分配内存
  • 将内容复制到前半部分;添加空终止符
  • 将内容复制到下半部分;添加一个空终止符
  • 使用你的字符串
  • 释放第一份
  • 释放第二份
  • 以下是您如何做到这一点:

    char *str = "quickbrownfox";
    int len = strlen(str);
    int len1 = len/2;
    int len2 = len - len1; // Compensate for possible odd length
    char *s1 = malloc(len1+1); // one for the null terminator
    memcpy(s1, str, len1);
    s1[len1] = '\0';
    char *s2 = malloc(len2+1); // one for the null terminator
    memcpy(s2, str+len1, len2);
    s2[len2] = '\0';
    ...
    free(s1);
    free(s2);
    

    如果您拥有整个字符串,则不需要进行第二次复制,因为将指针插入字符串的中间将非常有效。

    不,没有简单的方法可以做到这一点-它需要几个步骤:

  • 计算字符串的长度
  • 为两部分分配内存
  • 将内容复制到前半部分;添加空终止符
  • 将内容复制到下半部分;添加一个空终止符
  • 使用你的字符串
  • 释放第一份
  • 释放第二份
  • 以下是您如何做到这一点:

    char *str = "quickbrownfox";
    int len = strlen(str);
    int len1 = len/2;
    int len2 = len - len1; // Compensate for possible odd length
    char *s1 = malloc(len1+1); // one for the null terminator
    memcpy(s1, str, len1);
    s1[len1] = '\0';
    char *s2 = malloc(len2+1); // one for the null terminator
    memcpy(s2, str+len1, len2);
    s2[len2] = '\0';
    ...
    free(s1);
    free(s2);
    

    如果您拥有整个字符串,则不需要进行第二次复制,因为将指针插入字符串的中间将非常有效。

    当然。高中时学过数学,对吗?为什么你不能用strlen()找到分裂点?两半<代码>“abcde”是指
    “abc”
    “de”
    还是
    “ab”
    “cde”
    ?(忽略
    \n
    )。如果您知道字符串的长度(例如,n),那么索引[0,n/2]中的子字符串的副本是前半部分,而
    &string[n/2]
    是后半部分。`void split(char*s,char**a,char**b){int i=strlen s(s)/2;char c=s[i];s[i]=0;*a=strdup(s);s[i]=c;*b=strdup(s+i);}当然。高中时学过数学,对吗?为什么你不能用strlen()找到分裂点?两半?
    “abcde”
    “abc”
    “de”
    “ab”
    “cde”
    ?(忽略
    \n
    )。如果你知道字符串的长度(比如说,n),则索引[0,n/2]中的子字符串的副本是前半部分,而
    &string[n/2]
    是后半部分。`void split(char*s,char**a,char**b){int i=strlen(s)/2;char c=s[i];s[i]=0;*a=strdup(s);s[i]=c;*b=strdup(s+i);}`这里是a。“没有简单的方法可以做到这一点"-嗯,我确信这被认为是相当简单的。我会说很琐碎。@H2CO3来吧,在一对简单的
    substr
    s上花费这么多行代码并不简单-这几乎就像我们回到汇编语言编程。有人说C几乎像汇编。虽然我不同意,但我确实明白了这一点。不过,我的观点是,这不是不算什么困难。创建一个完整的操作系统,用繁重的数学编写一个3D引擎,编写人工智能……这就是我所说的困难。(我并不是因为我不会说德语就说“德语很难”。当然,如果我想学的话,我可以学。这都是努力和实践的结果。)是的,我想不会有像java或其他语言那样简单的方法。谢谢你的帮助这里有一个“没有简单的方法”-嗯,我确信这被认为是相当简单的。我会说很琐碎。@H2CO3来吧,在一对简单的
    substr
    s上花费这么多行代码并不简单-这几乎就像我们回到汇编语言编程。有人说C几乎像汇编。虽然我不同意,但我确实明白了这一点。不过,我的观点是,这不是不算什么困难。创建一个完整的操作系统,用繁重的数学编写一个3D引擎,编写人工智能……这就是我所说的困难。(我并不是因为我不会说德语就说“德语很难”。当然,如果我想学的话,我可以学。这都是努力和实践的结果。)是的,我想不会有像java或其他语言那样简单的方法。谢谢你的帮助