求助,编写一个函数,将两个字符串链接起来。

破晓-1 2015-07-26 05:25:10

#include<string.h>
char * link(char a[],char b[]){
char sum[200];
for(int i=0;i<strlen(a);i++){
sum[i]=a[i];
for(int j=1;j<=strlen(b);j++){
sum[i+j]=b[j-1];
}
}

printf("%s\n",sum);
return sum;
}
int main(){
char str1[100],str2[100];
char *a;
printf("please input two sentence:\n");
scanf("%s",str1);
printf("the two:");
scanf("%s",str2);
//gets(str2);
a=link(str1, str2);
//for(int i=0;*a!='\0';i++){
printf(a);
//*a++;
//}
}

结果
please input two sentence:
q
the two:W
qW\353\240
\360N\353\240
...全文
4088 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2018-11-06
  • 打赏
  • 举报
回复
楼主的逻辑写错了,两层循环应该是并列的而不是嵌套 for(int i=0;i<strlen(a);i++){ sum[i]=a[i]; for(int j=1;j<=strlen(b);j++){ sum[i+j]=b[j-1]; } } --> for(int i=0;i<strlen(a);i++){ sum[i]=a[i]; } for(int j=1;j<=strlen(b);j++){ sum[i+j]=b[j-1]; }
  • 打赏
  • 举报
回复
注:我是小白,可能代码有些啰唆了
#include<stdio.h>
#include<string.h>
void main()
{
void lj(char a[20],char b[20]);
int i=0,j=0;
char str1[20],str2[20];
gets(str1);
gets(str2);
lj(str1,str2);
}
void lj(char a[20],char b[20])
{
char c[40];
int i,s,j,z=0;
i=strlen(a);
j=strlen(b);
for(s=0;s<=i;s++)
{
c[s]=a[s];
}
for(s=i;s<=i+j;s++)
{
c[s]=b[z];
z++;
}
puts(c);
}
「已注销」 2015-08-12
  • 打赏
  • 举报
回复
char *mystrcat(char a[], char b[])
{
    char *ret = a;
    if (a != NULL && b != NULL) {
        while (*a != 0) {
            a++;
        }
        while (*b != 0) {
            *a++ = *b++;
        }
        *a = 0;
    }
    return ret;
}
_lee_chong 2015-08-05
  • 打赏
  • 举报
回复
不用str函数:


    char* a = "asd";
    char* b = "edf";
    
    int lenNew = 0;
    char* tmp = a;
    while (*tmp != '\0') {
        lenNew++;
        tmp++;
    }
    tmp = b;
    while (*tmp != '\0') {
        lenNew++;
        tmp++;
    }
    
    char* newStr = malloc((lenNew+1)*sizeof(char));
    memset(newStr, 0, (lenNew+1)*sizeof(char));
    
    int newIndex = 0;
    tmp = a;
    while (*tmp != '\0') {
        newStr[newIndex] = *tmp;
        tmp++;
        newIndex++;
    }
    tmp = b;
    while (*tmp != '\0') {
        newStr[newIndex] = *tmp;
        tmp++;
        newIndex++;
    }
_lee_chong 2015-08-05
  • 打赏
  • 举报
回复


    char* a = "asd";
    char* b = "edf";
    
    
    int lena = strlen(a);
    int lenb = strlen(b);
    int lenAll = lena + lenb;
    
    char* all = malloc((lenAll+1)*sizeof(char));
    memset(all, 0, (lenAll+1)*sizeof(char));
    
    sprintf(all, "%s%s", a,b);
    
    printf(all);
zhulonghaha 2015-08-04
  • 打赏
  • 举报
回复
内外循环是什么意思?
IT保安 2015-08-04
  • 打赏
  • 举报
回复
二层循环?有问题 简单点的逻辑: 首先确定a的长度 > 连接后的新长度 1. 目的字符串,a,strlen(a),得到a的长度 2. 使用下标寻址,来一个循环,a的尾部逐个加上b的字符 3. 返回地址 4. main函数中,最好使用strcpy(a,返回地址),不用用=号,
yht8708 2015-08-04
  • 打赏
  • 举报
回复
char sum[200];没有初始化,---》char sum[200] = {‘/0’}
或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';
自信男孩 2015-08-04
  • 打赏
  • 举报
回复
引用 3 楼 zhangxiangDavaid 的回复:
修改如下:

#include<string.h>
char *link(char a[], char b[]) {
	int n1, n2;
	n1 = strlen(a), n2 = strlen(b);
	char *res = malloc(n1 + n2 + 1);
	strncpy(res, a, n1);
	strncpy(res + n1, b, n2);
	res[n1 + n2] = 0;
	return res;
}
int main() {
	char str1[100], str2[100];
	char *res;
	printf("please input two sentence:\n");
	scanf("%s%s", str1, str2);
	res = link(str1, str2);
	printf("%s\n", res);
	free(res);
	return 0;
}
//please input two sentence:
//zhangxiang David
//zhangxiangDavid
+++这种方法是可以行的~当然也可以直接使用strcat的库函数
fly_dragon_fly 2015-08-03
  • 打赏
  • 举报
回复
字符串以0结尾, 所以sum应该在最后放个0, 这里二重循环是什么意思,不太明白?
浪里狼 2015-07-31
  • 打赏
  • 举报
回复
sum没有字符串结束符号 link函数内for循环有问题,如果参数a长度为1,程序是正常,如果a长度>1那么显示内容并不是两个字符串的拼接
mymtom 2015-07-27
  • 打赏
  • 举报
回复
用strcat不好吗?
苏叔叔 2015-07-26
  • 打赏
  • 举报
回复
修改如下:

#include<string.h>
char *link(char a[], char b[]) {
	int n1, n2;
	n1 = strlen(a), n2 = strlen(b);
	char *res = malloc(n1 + n2 + 1);
	strncpy(res, a, n1);
	strncpy(res + n1, b, n2);
	res[n1 + n2] = 0;
	return res;
}
int main() {
	char str1[100], str2[100];
	char *res;
	printf("please input two sentence:\n");
	scanf("%s%s", str1, str2);
	res = link(str1, str2);
	printf("%s\n", res);
	free(res);
	return 0;
}
//please input two sentence:
//zhangxiang David
//zhangxiangDavid
mewiteor 2015-07-26
  • 打赏
  • 举报
回复
sum结尾没加'\0'
破晓-1 2015-07-26
  • 打赏
  • 举报
回复
为什么会出现乱码?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧