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

时间:2022-10-25 20:22:16

#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

13 个解决方案

#1


为什么会出现乱码?

#2


sum结尾没加'\0'

#3


修改如下:

#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

#4


用strcat不好吗?

#5


sum没有字符串结束符号
link函数内for循环有问题,如果参数a长度为1,程序是正常,如果a长度>1那么显示内容并不是两个字符串的拼接

#6


字符串以0结尾, 所以sum应该在最后放个0, 这里二重循环是什么意思,不太明白?

#7


内外循环是什么意思?

#8


二层循环?有问题
简单点的逻辑:
首先确定a的长度 > 连接后的新长度

1. 目的字符串,a,strlen(a),得到a的长度
2. 使用下标寻址,来一个循环,a的尾部逐个加上b的字符
3. 返回地址

4. main函数中,最好使用strcpy(a,返回地址),不用用=号,

#9


引用 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的库函数

#10


char sum[200];没有初始化,---》char sum[200] = {‘/0’}
或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';

#11




    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);

#12


不用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++;
    }

#13


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;
}

#1


为什么会出现乱码?

#2


sum结尾没加'\0'

#3


修改如下:

#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

#4


用strcat不好吗?

#5


sum没有字符串结束符号
link函数内for循环有问题,如果参数a长度为1,程序是正常,如果a长度>1那么显示内容并不是两个字符串的拼接

#6


字符串以0结尾, 所以sum应该在最后放个0, 这里二重循环是什么意思,不太明白?

#7


内外循环是什么意思?

#8


二层循环?有问题
简单点的逻辑:
首先确定a的长度 > 连接后的新长度

1. 目的字符串,a,strlen(a),得到a的长度
2. 使用下标寻址,来一个循环,a的尾部逐个加上b的字符
3. 返回地址

4. main函数中,最好使用strcpy(a,返回地址),不用用=号,

#9


引用 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的库函数

#10


char sum[200];没有初始化,---》char sum[200] = {‘/0’}
或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';

#11




    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);

#12


不用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++;
    }

#13


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;
}