如何将两个字符串连接成一个字符串

时间:2023-01-07 15:10:33
有一题目:编写一个函数,它接受两个字符串参数,将它们连接成一个字符串,并使用函数 malloc() 为该字符串分配足够的存储空间,然后返回一个指向该字符的指针。

例如:如果传递的是“hello” 和 “world!”,则该项函数将返回一个指向"hello world!"的指针。

所以我写下下面的程序:

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

char * combine_strings(char *, char *);

char *a = "Hello";
char *b = "World!";
char *c;

int main(void)
{   
    c = combine_strings(a,b);
    
    getchar();
    
    return 0;
    
}

char * combine_strings(char *, char *)
{
   char *ptr;
   
   ptr = (char *)malloc(255 * sizeof(char));
   
   return(ptr);
     
     
}

我知道它不能解决问题,主要是:如何将两个字符串连接成一个字符串。

这就是我的问题所在。

请尽量说得详细点

16 个解决方案

#1


strcat

#2



#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
char * combine_strings(char *, char *); 

char *a = "Hello"; 
char *b = "World!"; 
char *c; 

int main(void) 
{  
    c = combine_strings(a,b); 
    puts(c);
    getchar(); 
    
    return 0; 
    


char * combine_strings(char *a, char *b) 

  char *ptr; 
  int lena=strlen(a),lenb=strlen(b);
  int i,l=0;
  ptr = (char *)malloc((lena+lenb+1) * sizeof(char)); 
  for(i=0;i<lena;i++)
  ptr[l++]=a[i];
  for(i=0;i<lenb;i++)
  ptr[l++]=b[i];
  ptr[l]='\0';
  return(ptr);      


#3


strcat

或者自己写个。
用strlen算长度,再记着个‘\0’就行了。

#4



#include <stdio.h>
#include <string.h>
#include <malloc.h>
char * combine_strings(const char* str1,const char* str2)
{
char *p=malloc(sizeof(char)*(strlen(str1)+strlen(str2))+1);
char *head=p;
while(*p++=*str1++);
--p;
while(*p++=*str2++);
return head;
}
int main()
{
char *str=combine_strings("Hello","world!");
printf("%s",str);
free(str);
return 0;
}


#5


还要加空格

#6


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

#define MAX 50
char * cat_strings(const char *, const char *); 

int main(void) 
{  
char str1[MAX],str2[MAX];
printf("enter your string1:\n");
gets(str1);

printf("enter your string2:\n");
gets(str2);

char *c = NULL;
    c = cat_strings(str1,str2); 

puts(c);
    
    getchar(); 
    
    return 0; 
    


char* cat_strings(const char *pstr1, const char *pstr2) 

  char *dest,*p;   
  dest = (char *)malloc(2 * MAX * sizeof(char));
  p = dest;

  while(*pstr1)
  *p++ = *pstr1++;

  while(*pstr2)
  *p++ = *pstr2++;
  *p = '\0';

  
  return(dest); 
    
    

#7


C风格的strcat即可,不过需要自己保证目标地址不会越界。
此外可以用string

#8


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

#define MAX_LEN 512

char* catstring(char*,char*);

int main(int argc, char *argv[])
{
    char s1[MAX_LEN],s2[MAX_LEN];
    
    printf("Please input you string1\n");
    gets(s1);
    
    printf("Please input you string2\n");
    gets(s2);
    
    char *s3 = catstring(s1,s2);
    if(!s3) return 0;
    
    printf("%s\n",s3);
    
    free(s3);
  
  system("PAUSE");
  return 0;
}

char* catstring(char *p1,char *p2)
{
    char *p = malloc(MAX_LEN);
    
    if(!p || (MAX_LEN <= strlen(p1)+strlen(p2)) ) return NULL;
    
    strcpy(p,p1);
    strcat(p,p2);
    
    return p;
}    

dev c++ 调试通过对

#9


std::string a
a.c_str()

#10


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

char * combine_strings(char *, char *); 

char *a = "Hello"; 
char *b = "World!"; 
char *c; 

int main(void) 
{  
    c = combine_strings(a,b); 
printf("%s",c);
    getchar(); 
    return 0; 
    


char * combine_strings(char *a, char *b) 

  char *ptr; 
  
  ptr = (char *)malloc((strlen(a)+strlen(b)+1) * sizeof(char)); 
 
  int i;
  for(i=0;i<=strlen(a);i++)
   {
*(ptr+i)=*(a+i);
}
   for(i=0;i<=strlen(b);i++)
{
*(ptr+i+strlen(a))=*(b+i);
}
  
  return(ptr); 
    
    
}

#11


按楼主的想法,可以把要创建的目标串作为参数传给函数char *combine_strings(char *src1, char *src2,char *des)

char *combine_strings(char *src1, char *src2,char *des)
{
   des=(char *)malloc(sizeof(255));
   while((*des++=*src1++)!=0);
   des--;
   while((*des++=*src2++)!=0);
   return des;     
}
不过个人不建议这么写。还是用strcat吧。

#12


strcat即可,但是最要做内存越界检测的处理。
因为strcat是不安全的

#13


char* CombineString(const char* first,const char* second,char* dest,int Max)
{
    if(first == NULL || second == NULL || dest == NULL || Max == 0)
        return NULL;
    int i = 0;
    for(; i < Max-1;i++)
    {
        if(*first == '\0')
            break;
        dest[i] = *first++;
    }
    for(; i < Max-1;i++)
    {
        if(*second == '\0')
            break;
        dest[i] = *second++;
    }
    dest[i] = 0;
    return dest;
}

#14


#include <stdio.h>
#include <string.h>
void main()
{
  char str1[15]="hello";
  char str2[15]=" world!";
  printf("%s\n",strcat(str1,str2));

}

#15


5楼写的很好了 

#16


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

char * combine_strings(char *, char *); 

char *a = "Hello"; 
char *b = "World!"; 
char *c; 

int main(void) 
{  
    c = combine_strings(a,b); 
    
    getchar(); 
    
    return 0; 
    


char * combine_strings(char * s1, char * s2

  char *ptr; 
  
  ptr = (char *)malloc ((sizeof(s1)+sizeof(s2))* sizeof(char)); 
   strcat(ptr,s1);
  strcat(ptr,s2);

  return(ptr); 
    
    



估计这样应该差不多了

#1


strcat

#2



#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
char * combine_strings(char *, char *); 

char *a = "Hello"; 
char *b = "World!"; 
char *c; 

int main(void) 
{  
    c = combine_strings(a,b); 
    puts(c);
    getchar(); 
    
    return 0; 
    


char * combine_strings(char *a, char *b) 

  char *ptr; 
  int lena=strlen(a),lenb=strlen(b);
  int i,l=0;
  ptr = (char *)malloc((lena+lenb+1) * sizeof(char)); 
  for(i=0;i<lena;i++)
  ptr[l++]=a[i];
  for(i=0;i<lenb;i++)
  ptr[l++]=b[i];
  ptr[l]='\0';
  return(ptr);      


#3


strcat

或者自己写个。
用strlen算长度,再记着个‘\0’就行了。

#4



#include <stdio.h>
#include <string.h>
#include <malloc.h>
char * combine_strings(const char* str1,const char* str2)
{
char *p=malloc(sizeof(char)*(strlen(str1)+strlen(str2))+1);
char *head=p;
while(*p++=*str1++);
--p;
while(*p++=*str2++);
return head;
}
int main()
{
char *str=combine_strings("Hello","world!");
printf("%s",str);
free(str);
return 0;
}


#5


还要加空格

#6


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

#define MAX 50
char * cat_strings(const char *, const char *); 

int main(void) 
{  
char str1[MAX],str2[MAX];
printf("enter your string1:\n");
gets(str1);

printf("enter your string2:\n");
gets(str2);

char *c = NULL;
    c = cat_strings(str1,str2); 

puts(c);
    
    getchar(); 
    
    return 0; 
    


char* cat_strings(const char *pstr1, const char *pstr2) 

  char *dest,*p;   
  dest = (char *)malloc(2 * MAX * sizeof(char));
  p = dest;

  while(*pstr1)
  *p++ = *pstr1++;

  while(*pstr2)
  *p++ = *pstr2++;
  *p = '\0';

  
  return(dest); 
    
    

#7


C风格的strcat即可,不过需要自己保证目标地址不会越界。
此外可以用string

#8


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

#define MAX_LEN 512

char* catstring(char*,char*);

int main(int argc, char *argv[])
{
    char s1[MAX_LEN],s2[MAX_LEN];
    
    printf("Please input you string1\n");
    gets(s1);
    
    printf("Please input you string2\n");
    gets(s2);
    
    char *s3 = catstring(s1,s2);
    if(!s3) return 0;
    
    printf("%s\n",s3);
    
    free(s3);
  
  system("PAUSE");
  return 0;
}

char* catstring(char *p1,char *p2)
{
    char *p = malloc(MAX_LEN);
    
    if(!p || (MAX_LEN <= strlen(p1)+strlen(p2)) ) return NULL;
    
    strcpy(p,p1);
    strcat(p,p2);
    
    return p;
}    

dev c++ 调试通过对

#9


std::string a
a.c_str()

#10


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

char * combine_strings(char *, char *); 

char *a = "Hello"; 
char *b = "World!"; 
char *c; 

int main(void) 
{  
    c = combine_strings(a,b); 
printf("%s",c);
    getchar(); 
    return 0; 
    


char * combine_strings(char *a, char *b) 

  char *ptr; 
  
  ptr = (char *)malloc((strlen(a)+strlen(b)+1) * sizeof(char)); 
 
  int i;
  for(i=0;i<=strlen(a);i++)
   {
*(ptr+i)=*(a+i);
}
   for(i=0;i<=strlen(b);i++)
{
*(ptr+i+strlen(a))=*(b+i);
}
  
  return(ptr); 
    
    
}

#11


按楼主的想法,可以把要创建的目标串作为参数传给函数char *combine_strings(char *src1, char *src2,char *des)

char *combine_strings(char *src1, char *src2,char *des)
{
   des=(char *)malloc(sizeof(255));
   while((*des++=*src1++)!=0);
   des--;
   while((*des++=*src2++)!=0);
   return des;     
}
不过个人不建议这么写。还是用strcat吧。

#12


strcat即可,但是最要做内存越界检测的处理。
因为strcat是不安全的

#13


char* CombineString(const char* first,const char* second,char* dest,int Max)
{
    if(first == NULL || second == NULL || dest == NULL || Max == 0)
        return NULL;
    int i = 0;
    for(; i < Max-1;i++)
    {
        if(*first == '\0')
            break;
        dest[i] = *first++;
    }
    for(; i < Max-1;i++)
    {
        if(*second == '\0')
            break;
        dest[i] = *second++;
    }
    dest[i] = 0;
    return dest;
}

#14


#include <stdio.h>
#include <string.h>
void main()
{
  char str1[15]="hello";
  char str2[15]=" world!";
  printf("%s\n",strcat(str1,str2));

}

#15


5楼写的很好了 

#16


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

char * combine_strings(char *, char *); 

char *a = "Hello"; 
char *b = "World!"; 
char *c; 

int main(void) 
{  
    c = combine_strings(a,b); 
    
    getchar(); 
    
    return 0; 
    


char * combine_strings(char * s1, char * s2

  char *ptr; 
  
  ptr = (char *)malloc ((sizeof(s1)+sizeof(s2))* sizeof(char)); 
   strcat(ptr,s1);
  strcat(ptr,s2);

  return(ptr); 
    
    



估计这样应该差不多了