C语言学习历程——编程练习2——05

来源:互联网 发布:60数据库海盗的帽子 编辑:程序博客网 时间:2024/05/09 04:41
5.  编写函数void change(char *a,char *b,char*c)。 
  函数功能是首先把b指向的字符串逆向存放
  然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中

  两个字符串中过长的剩余字符接在c指向数组的尾部。


分析:主要是交叉合并到c的处理代码如下。


下面是代码实现:


/********************************************************************
  编写函数void change(char *a,char *b,char*c)。 
  函数功能是首先把b指向的字符串逆向存放
  然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中
  两个字符串中过长的剩余字符接在c指向数组的尾部。
*********************************************************************/


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


int mystrlen (char *str)  //字符串的长度
{
int length = 0;


if (str == NULL)
{
return -1;
}


while (*str++)
{
length++;
}
return length;
}


void RevStr (char *str, int len)
{
int i = 0;
char temp = 0;


for (i = 0; i < len / 2; i++) //字符串倒置
{
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}


void change (char *a, char *b, char *c)
{
int i = 0;
int count = 0;
int blen = mystrlen(b);


RevStr(b, blen); //将字符串b倒置


while (*a)  //遍历a字符串,将a中元素装进c里面
{
*c++ = *a; 
if (count < blen)
{
*c++ = *b++;  //交叉放入c中,a长则把a多余的放入c中,否则把b多余的放入c中
count++;
}
a++;
}
while (*b)
{
*c++ = *b++;
}
*c = '\0';
}


int main()
{
char *a = NULL;
char *b = NULL;
char *c = NULL;
a = (char *)malloc(100 * sizeof(char));
b = (char *)malloc(100 * sizeof(char));
c = (char *)malloc(100 * sizeof(char));


printf ("Please input a string: "); //接收2个字符串
scanf ("%s", a);
printf ("Please input a string: ");
scanf ("%s", b);


change(a, b, c);


printf ("c = %s\n", c); //输出结果

free(c);
c = NULL;
free(b);
b = NULL;
free(a);
a = NULL;


return 0;
}



0 0
原创粉丝点击