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