C程序-在每一个字符之间放置一个星号,而不替换字符串中的这些字符
这是做作业的 我必须创建一个程序,在其中,我在字符串中的每个其他字符之间放置星号。我的程序可以工作,但是当星号应该放在其他字符之间,而不是最后一个字符之后时,它会覆盖字符。我的代码中的问题在于stars函数和main中的case w。你可以忽略其余的。我将把这些示例放在我的程序之后。谢谢你的帮助C程序-在每一个字符之间放置一个星号,而不替换字符串中的这些字符,c,arrays,string,C,Arrays,String,这是做作业的 我必须创建一个程序,在其中,我在字符串中的每个其他字符之间放置星号。我的程序可以工作,但是当星号应该放在其他字符之间,而不是最后一个字符之后时,它会覆盖字符。我的代码中的问题在于stars函数和main中的case w。你可以忽略其余的。我将把这些示例放在我的程序之后。谢谢你的帮助 输出a*b*c*1*2*3 ->不应该有任何空格,我只是用空格隔开,因为网站会用斜体字显示整个内容此解决方案与原始解决方案非常接近: void stars(char *as1, char *as2,
输出a*b*c*1*2*3
->不应该有任何空格,我只是用空格隔开,因为网站会用斜体字显示整个内容此解决方案与原始解决方案非常接近:
void stars(char *as1, char *as2, char *output2)
{
char *buffer=malloc(strlen(as1)+strlen(as2)+1);
strcpy(buffer, as1);
strcat(buffer, as2);
int i, k = 0;
for (i=0; i < 2*strlen(buffer)-1; i++)
if (i%2){
output2[i] = '*';
} else {
output2[i] = buffer[k];
k++;
}
output2[i] = '\0';
}
循环遍历
output2
数组,并在每个奇数索引位置插入星号,即i%2
不是0.0时。当i%2
为零时,它将插入buffer
中的字符,同时为buffer
数组使用单独的索引k。它在i=2*strlen(buffer)-1
处停止,以避免将*
放在as2
的最后一个字符之后,并将空字符放在生成的output2
数组的末尾。i将strcat
这两个字符串放在一起(虽然这不是必需的,但您可以背靠背地遍历它们),然后一次遍历组合字符串1个字符,并将该字符加上一个'*'
添加到新字符串中。然后在末尾(循环外部)将后面的'*'
替换为'\0'
,以切掉多余的'*'
并终止字符串。实际上,在第二天,我想我不会将它们组合在一起,这只是另一个你必须担心的缓冲区。只需分配一个足够大的目标缓冲区,然后遍历这两个字符串每次字符串1个字符,在字符处,然后“*”
到目标缓冲区,然后切掉尾随的“*”
就完成了。@yano你能解释一下我如何将“*”添加到缓冲区吗?只是一个简单的赋值,你已经用输出2[I]完成了='*';
。我想棘手的部分是将索引保留在输出字符串中的正确添加位置。这必须是一个单独的索引,而不是用于遍历源字符串的索引。对于源字符串中读取的每个字符,将向输出字符串中添加2个字符。
What my program does:
Enter String 1: abc
Enter String 2: 123
Output a*c*2*
What it should do:
Enter String 1: abc
Enter String 2: 123
void stars(char *as1, char *as2, char *output2)
{
char *buffer=malloc(strlen(as1)+strlen(as2)+1);
strcpy(buffer, as1);
strcat(buffer, as2);
int i, k = 0;
for (i=0; i < 2*strlen(buffer)-1; i++)
if (i%2){
output2[i] = '*';
} else {
output2[i] = buffer[k];
k++;
}
output2[i] = '\0';
}
char *output2=malloc(2*(strlen(string1)+strlen(string2)));