冰焰s悠悠球怎么样:C程序高手帮忙给个答案

来源:百度文库 编辑:高校问答 时间:2024/04/20 06:00:51
编一个指针型函数将两个字符串连接成一个字符串,函数返回值是连接后所得字符串的首地址。两个原始字符串的首地址作为函数的参数,在主函数中调用该函数,输入两个字符串,并输出连接后的字符串。不能使用系统函数。

多谢多谢···
楼下的几位似乎都太复杂了,其实这个问题很简单的。firstclass 给的比较接近题目的要求。他是把a2字符串直接赋给a1后面。

不过大家可不可以想考虑:定义字符串a1,a2,用指针p指向a1的首地址,p+strlen(a1)指向a2的首地址。

另外,帮忙给这个分析一下
char *swap(char a[] ,char b[])
{int j,i;
j= strlen(a);
i= strlen(b);
for(int n=0;n<=i;n++)
{
a[j+n]=b[n];
}
return(a);
}

main()
{
char a1[40],a2[20];
scanf("输入字符串a1:%s",a1);
printf("输出字符串a1:%s\n",a1);
scanf("输入字符串a1:%s",a2);
printf("输出字符串a2:%s\n",a2);
printf("/n新的字符串a为:%s", swap(a1,a2));
}

最简单的方式:

#include<stdio.h>

char * charlink(char *p, char *q){
char *pp=p;
char *qq=q;
while(*pp!='\0') pp++;
while(*qq!='\0') *pp++=*qq++;
*pp='\0';
return p;
}

main(){
char a[10]="aaa";
char *b="bbb";
printf("%s\n",charlink(a,b));
}

rv2001的明显有问题。。。
1、char buffer[count]是不允许的,count是变量,不能放[]里,只能用常量
2、这句声明的是在堆栈上分配的内存,函数退出后,堆栈会立即释放,所以返回值肯定出错

下面测试过了:)bind函数是要分配内存的

#include <stdio.h>
#include <malloc.h>

char *bind(char *data1,char *data2){
char *ret = NULL;
int i = 0, count1 = 0, count2 = 0;

if(data1 == NULL || data2 == NULL) return NULL;
while(data1[count1++]);
while(data2[count2++]);
ret = (char *)malloc(sizeof(char) * (count1 + count2 - 1));
count1 = 0; count2 = 0;
while(data1[count1])
{
ret[count1] = data1[count1];
count1++;
}
while(data2[count2])
{
ret[count1 + count2] = data2[count2];
count2++;
}
ret[count1 + count2] = 0;
return ret;
}
int main(int argc, char **argv)
{
char dd[]="abc";
char cc[]="defg";
char *p = NULL;
puts(dd);
puts(cc);
p = bind(dd, cc);
if(p) puts(p);
free(p);
return 0;
}

firstclass的也有问题,就是必须保证参数p拥有足够的内存。

下面分析:
/*这个函数实际上就是实现的你要求的功能,不过名字叫swap太迷惑了,swap是交换的意思*/
char *swap(char a[] ,char b[])
{int j,i;
j= strlen(a);
/*j是字符串a的长度*/
i= strlen(b);
/*i是字符串b的长度*/
for(int n=0;n<=i;n++)
{
a[j+n]=b[n];
/*把b的每个字符拷贝到a后面*/
}
return(a);
}

main()
{
char a1[40],a2[20];
scanf("输入字符串a1:%s",a1);
/*scanf里面最好不要写这么多,不然你命令行输入的时候得输入"输入字符串:aaa",才能让a1的值是aaa*/
printf("输出字符串a1:%s\n",a1);
scanf("输入字符串a1:%s",a2);
printf("输出字符串a2:%s\n",a2);
printf("/n新的字符串a为:%s", swap(a1,a2));
}
这个程序也是保证a1的长度40能够容纳下a2的20个字符,所以输入的a1必须少于20个字符,不然会出错,比如你a1,a2都输入abcdefghijklmnopqrstuvwxyz
就不保证结果正确了。

什么叫不使用系统函数呢?malloc算不算?

#include <stdio.h>
#include <stdlib.h>

char *UniteStr(char *str1, char *str2)
{
char *result = NULL;
int len1, len2;

if( str1==NULL ) return str2;
if( str2==NULL ) return str1;

len1 = strlen(str1);
len2 = strlen(str2);

result = (char *)malloc(sizeof(char) * (len1 + len2 - 1));

strcpy(result, str1);
strcat(result, str2);

return result;
}

int main(int argc, char **argv)
{
char a[] = "hello ";
char b[] = "world";
char *c = NULL;

c = UniteStr(a, b);
if(c)
printf("Result : %s\n", c);
free(c);

return 0;
}

/*
版权所有
陈冠钢

连接字符串
*/

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

char *swap(char *a1,char *a2)
{
char *sum;
int len,lena1,lena2,i,num=0;
lena1=strlen(a1);
lena2=strlen(a2);
len=lena1+lena2+1;
sum=(char *)malloc(len*sizeof(char));
for(i=0;i<len-1;i++)
{
if(i>=lena1)
{
sum[i]=a2[num++];
}
else
{
sum[i]=a1[i];
}
}
sum[len-1]='\0';
return sum;
}

main()
{
char a1[40],a2[20];
printf("输入字符串a1: ");
scanf("%s",a1);
printf("输入字符串a2: ");
scanf("%s",a2);
printf("\n新的字符串a为:%s\n", swap(a1,a2));
}

我的最简单,其实你说的用p+strlen(s2)不是也用了系统函数strlen了吗?
char *mystrcat(char *s1,char *s2)
{
char *p=s1;
while(*s1++); //将指针移动到s1的结束符后一位
s1--;
while(*s1++ = *s2++); //将s2接在s1后面
return p;
}