例如:如果传递的是“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’就行了。
或者自己写个。
用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
此外可以用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++ 调试通过对
#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()
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);
}
#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是不安全的
因为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;
}
{
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));
}
#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);
}
估计这样应该差不多了
#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’就行了。
或者自己写个。
用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
此外可以用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++ 调试通过对
#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()
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);
}
#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是不安全的
因为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;
}
{
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));
}
#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);
}
估计这样应该差不多了
#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);
}
估计这样应该差不多了