鉴于此作业:写一个有3个参数的函数:前两个将在第三个中合并。示例:s1=“abcde”,s2=“1234567”,结果:s3=“a1b2c3d4e567”。
谢谢你提前回答:)
到目前为止,我的代码看起来像这样(问题是它只在两个字符串的长度相等时才有效:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int homework(char a[], char b[])
{
char c[210]={'0'};
int h1=strlen(a);
int h2=strlen(b);
int i=0;
int j;
int db=0;
int l=0;
while ( h1>=0 && h2>=0 )
{
db++;
c[i]=a[l];
c[i+1]=b[l];
h2--;
h1--;
i+=2;
l++;
}
h1++;
h2++;
printf("%d %d",h1,h2);
if (h1>0){
i--;
while (h1>0)
{
c[i]=a[l];
l++;
i++;
h1--;
}
}
if (h2>0){
i--;
while (h2>0)
{
c[i]=a[l];
l++;
i++;
h2--;
}
}
for (j=0; j<strlen(a)+strlen(b); j++)
printf("%c",c[j]);
}
int main()
{
char a[100],b[100];
gets(a);
gets(b);
homework(a,b);
return 0;
}
5条答案
按热度按时间ovfsdjhp1#
这很好。请进行以下更改:
gcxthw6b2#
您的代码中存在一些问题。
次要问题:
1.您将
homework
函数定义为int homework(char a[], char b[])
-但该函数中没有return
语句。1.在函数
homework
中变量db
的用法是什么?我不认为我理解了它的用法-声明(或使用)该变量真的有必要吗?现在的主要问题:
这一次,我首先关注的是这个循环-
为了说明你犯了什么错误,让我们假设两个字符串
a="abc"
(strlen(a)=3
)和b="12345"
(strlen(b)=5
)。你的循环将正常工作,直到
l=2
-在那个点(l=2
),输出char
数组c={'a','1','b','2','c','3'}
。但是在那之后,因为然后是
h1=0
和h2>0
,你将从a
和b
中取出一个额外的char
作为输出数组-在那一刻分别是'\0'
和'4'
。在这次迭代之后,输出数组变成{'a','1','b','2','c','3','\0','4'}
。你不应该做这次循环的迭代。考虑到这个问题,你的循环应该是这样的:
或者,可能像这样:
在这个循环之后,我看到了另一个像这样的循环:
因为最初
h2=strlen(b);
,在那一刻h2
表示剩余的char
的数量,从b
复制到c
。但是在这个循环中,您试图从a
复制char
。所以,根据我的理解,
(!)
线应该是-webghufk3#
我试着做了这样的事情:
在Linux gcc下编译正常。
或者(正如Roi指出的)如果你不介意输出字符串的内存分配。类似于:
isr3a4wc4#
你可以试试这个:”
PS:当你创建一个int函数的时候不要忘记返回一些东西;)
jljoyd4f5#