两个字符串的连接与丢弃重叠

时间:2015-07-28 13:40:43

标签: c c-strings

我需要在C中构建一个函数,它接收两个字符串str1和str2并返回一个串联str1和str2的字符串,但我需要丢弃str1的最后一个元素,它们等于str2的第一个元素

示例1:

str1 = ccabcc
str2 = ccbabd
result : ccabccbabd

示例2:

str1 = abbcbf
str2 = ab
Result : abbcbfab

有时没有重叠。

3 个答案:

答案 0 :(得分:0)

这个问题很简单。就个人而言,我会选择这样的东西(伪代码):

function(str1,str2)
int j = 0
int lstr1 = lenght of str 1
int lstr2 = lenght of str 2
while(true)  
  if(str1[lstr1 - j] == str2[j])
    j++ 
 else
   break
 return str1 + str2[j to end of string]

如果我没有犯逻辑错误,那么代码应该看起来像是将str 1的结尾与str 2的开头和增量进行比较的东西。另外,我的伪代码没有考虑字符串长度和潜在的溢出错误。

答案 1 :(得分:0)

I hope this is what you need:

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

char *concate(char *first, char *second){
    size_t len1 = strlen(first);
    size_t len2 = strlen(second);
    char *res = (char *)malloc(len1 +len2 +1);

    if(res==NULL){
        exit(1);
    }

    if(first[len1-1] == second[0]){
        first[len1-1] = 0;
        second++;
    }

    strcpy(res,first);
    strcat(res,second);

    return res;
}

int main(void){
    int i = 0,len = 0;
    char arr[] = "ccabcc";
    char arr2[] = "ccbabd";
    char *res = concate(arr,arr2);

    while(res[len] != '\0'){
        len++;
    }

    for(i=0;i<len;i++){
        printf("%c",res[i]);
    }

    printf("\n");
    free(res);
    return 0;

}

Output:

ccabccbabd

答案 2 :(得分:-4)

int main(){
    char a[256], b[256];

    printf("Enter 1st string\n");
    gets(a);


    printf("Enter the 2nd string\n");
    gets(b);

    strcat(a,b);
    printf("String concatenation is %s\n",a);

}