首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我被985高校的题折腾的不行了,大家看看小弟我这程序能得分不

2012-03-04 
我被985高校的题折腾的不行了,大家看看我这程序能得分不编写一个C程序采用一个函数实现两个字符串的前后连

我被985高校的题折腾的不行了,大家看看我这程序能得分不
编写一个C程序采用一个函数实现两个字符串的前后连接和后前连接(15')
这题究竟说的什么意思,是要我去写一个类似strcat的函数呢还是我用strcat将字符串连接起来?
我的代码如下:

C/C++ code
#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);}


[解决办法]
探讨

回8L的方法
1、void strlink(char *str1,char *str2),然后运行的时候,原来的str2内容连接到str1后面,实现前后连接,原来的str1的内容连接到str2后面,实现后前连接。

然后在strlink中,同样有必要先用2个临时数组分别存放str1和str2的内容,需要用到strcpy和strcat,再分别实现将str2连接到str1的后面,将str1连接……

[解决办法]
strlen也不用的话:(四个for语句,非常好玩,O(∩_∩)O哈哈~)
C/C++ code
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];}
[解决办法]
楼主啊……
C/C++ code
//懒得检查指针合法性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;}
[解决办法]
这样应该合要求了。。也不存在溢出问题


C/C++ code
#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);
}
[解决办法]
探讨

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


[解决办法]
C/C++ code
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;}
[解决办法]
C/C++ code
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;} 

热点排行