gpt4 book ai didi

两个单独字符串的前半部分的串联

转载 作者:行者123 更新时间:2023-11-30 20:36:31 26 4
gpt4 key购买 nike

如何编写 C 程序来接受用户的两个字符串并打印一个字符串,该字符串是两个字符串前半部分连接的结果。对于奇数长度的字符串,额外的字符会出现在字符串的前半部分。

到目前为止我已经有了这个,但对分成两半感到困惑......

printf("Please enter your first word.\n"); //Asks for first string

scanf("%s",&c); //Takes first string

printf("Please enter your second word.\n"); //Asks for second string

scanf("%s",&d); //Takes second string

strcat(c,d); //Combines both strings

最佳答案

如果你只想打印结果而不关心字符串 c 和 d 的内容,你可以这样做

#include <stdio.h>
#include <string.h>

int main(void) {
char c[1024]; // c string buffer
char d[1024]; // d string buffer

// initialize to empty strings
c[0] = '\0';
d[0] = '\0';

// read strings c and d
scanf("%s", c);
scanf("%s", d);

// just to make sure there is no overflow
c[1023] = '\0';
d[1023] = '\0';

// cut strings in middle
c[(strlen(c) + 1)/2] = '\0';
d[(strlen(d) + 1)/2] = '\0';

// print final string
printf("%s", c);
printf("%s\n", d);

return 0;

}

(strlen(c) + 1)/2 的结果符合您的要求,因为它执行整数除法。如果 strlen(c) 给出偶数大小,则加 1 将使其成为下一个奇数,而不影响整数除法。另一方面,如果数字是奇数,则加一将使其成为下一个偶数,从而实现您所需的四舍五入。 '\0' 将确保字符串在该点终止。

如果您不想丢失两个字符串的信息或需要存储结果字符串,那么您可以执行类似的操作

#include <stdio.h>
#include <string.h>

int main(void) {
char c[1024]; // c string buffer
char d[1024]; // d string buffer
char r[1024]; // resulting string buffer
int i; // general counter
int c_half_len; // c half length
int d_half_len; // d half length

// initialize to empty strings
c[0] = '\0';
d[0] = '\0';
r[0] = '\0';

// read strings c and d
scanf("%s", c);
scanf("%s", d);

// just to make sure there is no overflow
c[1023] = '\0';
d[1023] = '\0';

// get c and d half lengths rounding up
c_half_len = (strlen(c) + 1)/2;
d_half_len = (strlen(d) + 1)/2;

// copy first half c string to begining of result
for (i = 0; i < c_half_len; ++i) {
r[i] = c[i];
}

// copy first half d string after the end of the first half string
for (i = 0; i < d_half_len; ++i) {
r[c_half_len + i] = d[i];
}

// add an end of string character
r[c_half_len + d_half_len] = '\0';

// print final string
printf("%s\n", r);

return 0;

}

在这两种情况下,我假设两个字符串都有最大长度,在本例中为 1024(包括字符串结尾字符)。如果情况并非如此,那么您将需要使用动态内存来处理事情。

关于两个单独字符串的前半部分的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com