我被985高校的题折腾的不行了,大家看看我这程序能得分不
编写一个C程序采用一个函数实现两个字符串的前后连接和后前连接(15')
这题究竟说的什么意思,是要我去写一个类似strcat的函数呢还是我用strcat将字符串连接起来?
我的代码如下:
#include<stdio.h>#include<string.h>void mycat(char *ps1,char *ps2){ char s12[100],s21[100]; strcpy(s12,ps1); strcpy(s21,ps2); strcat(s12,ps2); strcat(s21,ps1); printf("s1-s2:\n%s\ns2-s1:\n%s",s12,s21);}void main(){ char s1[100]={"Hello, world!"},s2[100]={"God Hel Me!"}; mycat(s1,s2);}void strlink(char *str1,char *str2){ int len1,len2,i; for(len1=0;str1[len1]!='\0';len1++); for(len2=0;str2[len2]!='\0';len2++); //str2:后前连接 for(i=0;i<len1+1;i++)str2[len2+i]=str1[i]; //str1:前后连接 for(i=0;i<len2+1;i++)str1[len1+i]=str2[i];}
[解决办法]
楼主啊……
//懒得检查指针合法性void concat_two_way(char* a, char* b, char* ab, char* ba) { // 懒得告诉你怎么算字符串长度 int len_a; // a的内容长度 int len_b; // b的内容长度 // 将字符逐个拷过去好了 int i; for (i=0; i<len_a; i++) { ab[i] = a[i]; ba[len_b+i] = a[i]; } for (i=0; i<len_b; i++) { ab[len_a+i] = b[i]; ba[i] = b[i]; } //字符串以零结尾 ab[len_a+len_b] = 0; ba[len_a+len_b] = 0;}
[解决办法]
这样应该合要求了。。也不存在溢出问题
#include <stdio.h>void strlink(const char *str1, const char *str2, char **f_l, char **l_f){ int len1, len2; char *p; len1 = 0; len2 = 0; for (p = str1; *p != '\0'; p++) len1++; for (p = str2; *p != '\0'; p++) len2++; *f_l = (char *)malloc(sizeof(char) * (len1 + len2 + 1)); *l_f = (char *)malloc(sizeof(char) * (len1 + len2 + 1)); *l_f += len2; for (p = str1; *p != '\0'; p++) { *((*f_l)++) = *p; *((*l_f)++) = *p; } *l_f -= (len2 + len1); for (p = str2; *p != '\0'; p++) { *((*f_l)++) = *p; *((*l_f)++) = *p; } **f_l = '\0'; *(*l_f + len1) = '\0'; *f_l -= len1 + len2; *l_f -= len2;}int main(){ char *a = "abcdef", *b = "ghijkl"; char *c, *d; strlink(a, b, &c, &d); printf("%s1 %s2\n", c, d);}
[解决办法]
void mycat(string *dst, const string *src)
{
while(*dst ++);
dst --;
while(*dst ++ = *src ++);
}
不知道对不对,应该这样的思路吧
[解决办法]
用sprintf不就一行代码吗?
#include <stdio.h>
#include <string.h>
int main()
{
char *a="hello";
char *b="world!";
char *c=(char *)malloc((strlen(a)+strlen(b)+1));
memset(c,0,(strlen(a)+strlen(b)+1));
sprintf(c,"%s%s",a,b);
printf("the c :%s\t",c);
}
[解决办法]
void mycat(char *ps1,char *ps2){ int ps1_len = strlen(ps1); int ps2_len = strlen(ps2); memcpy(ps1+ps1_len, ps2, ps2_len+1); memcpy(ps2+ps2_len, ps1, ps1_len+1); return;}
[解决办法]
char* connect(char* a, char* b){ int i = 0; char* c = NULL; c = new char[24]; while(*a != '\0'){ *c = *a; i++; a++; c++; } while(*b != '\0'){ *c = *b; i++; b++; c++; } for(int j = i; j < 23; j++){ *c = ' '; c++; } c ++; *c = '\0'; i = 24; while(i>0){ i--; c--; } return c;}