编写函数mystrcat,实现和strcat完全相同的功能
系统函数strcat的功能是把两个字符串连接成一个字符串,使用这一函数时要求头文件包含:#include <string.h>。函数调用形式是strcat(字符串1,字符串2),函数执行后把字符串2的内容连接到字符串1的后面。问题中可以先计算字符串1的长度,从字符串1的长度+1位置(也就是字符串1结束符的位置)开始,利用循环依次将字符串2的所有字符拷贝到字符串1。遍历字符串元素时,可以利用字符串结束符结束循环。
注意:拷贝过程结束后,要确保连接后的字符串有字符串结束符,否则会产生错误。
数据要求
问题中的常量:#define MAXNUM 200 /*定义数组的最大长度*/
问题的输入:char str1 /*字符串1,初始的字符串*/;char str2 /*字符串2*,要连接的字符串/
问题的输出:char str1 /*字符串1,最终输出的字符串*/
初始算法
1.初始化字符串1和字符串2;
2.调用函数mystrcat把字符串2连接到字符串1的后面;
3.输出字符串1;
4.结束。
算法细化
步骤2的细化
2.1 定义变量i,j
2.2 利用循环i找出字符串str1的长度
2.2.1 不是结束标志,i++
2.2.2 是结束标志,退出循环
2.3 利用循环j把字符串str2的内容接到str1的后面
2.3.1不是结束标志,j++
2.3.2是结束标志,退出循环
2.4 给str1后面赋值'\0'
2.5 函数结束
程序代码如下:
#include “stdio.h”
#define MAXNUM 200
void mystrcat(char str1[],char str2[])
{
int i,j;
/*计算str1的长度,循环结束后i的值等于str1的长度加1*/
for(i=0; str1 [i]!='\0';i++);
/*在str1后添加str2的每个字符*/
for(j=0; str2 [j]!='\0';j++)
str1 [i+j]= str2 [j];
/*最后一定要加上字符串结束符*/
str1 [i+j]='\0';
}
main()
{
/*定义两个字符数组str1和str2,注意str1要能容纳连接后的字符串*/
char str1[MAXNUM],str2[MAXNUM];
/*输入str1和str2*/
printf("\nPlease input str1:\n");
gets(str1);
printf("Please input str2:\n");
gets(str2);
/*调用函数进行处理*/
mystrcat(str1,str2);
/*打印输出结果*/
printf("Catenated str1=%s",str1);
}
分析
结果为:
Please input str1:
hello!
Please input str2:
kitty
Catenated str1=hello!kitty
函数mystrcat也可以使用指针方式实现,main函数不用改动,代码如下:
void mystrcat(char *pstr1,char *pstr2)
{
/*将指针pstr1拨到字符串末尾*/
while(*pstr1) pstr1++;
/*在pstr2后添加pstr2的每个字符,注意循环最后一次拷贝了'\0'*/
while(*pstr1++=* pstr2++);
}
注意:拷贝过程结束后,要确保连接后的字符串有字符串结束符,否则会产生错误。
数据要求
问题中的常量:#define MAXNUM 200 /*定义数组的最大长度*/
问题的输入:char str1 /*字符串1,初始的字符串*/;char str2 /*字符串2*,要连接的字符串/
问题的输出:char str1 /*字符串1,最终输出的字符串*/
初始算法
1.初始化字符串1和字符串2;
2.调用函数mystrcat把字符串2连接到字符串1的后面;
3.输出字符串1;
4.结束。
算法细化
步骤2的细化
2.1 定义变量i,j
2.2 利用循环i找出字符串str1的长度
2.2.1 不是结束标志,i++
2.2.2 是结束标志,退出循环
2.3 利用循环j把字符串str2的内容接到str1的后面
2.3.1不是结束标志,j++
2.3.2是结束标志,退出循环
2.4 给str1后面赋值'\0'
2.5 函数结束
程序代码如下:
#include “stdio.h”
#define MAXNUM 200
void mystrcat(char str1[],char str2[])
{
int i,j;
/*计算str1的长度,循环结束后i的值等于str1的长度加1*/
for(i=0; str1 [i]!='\0';i++);
/*在str1后添加str2的每个字符*/
for(j=0; str2 [j]!='\0';j++)
str1 [i+j]= str2 [j];
/*最后一定要加上字符串结束符*/
str1 [i+j]='\0';
}
main()
{
/*定义两个字符数组str1和str2,注意str1要能容纳连接后的字符串*/
char str1[MAXNUM],str2[MAXNUM];
/*输入str1和str2*/
printf("\nPlease input str1:\n");
gets(str1);
printf("Please input str2:\n");
gets(str2);
/*调用函数进行处理*/
mystrcat(str1,str2);
/*打印输出结果*/
printf("Catenated str1=%s",str1);
}
分析
结果为:
Please input str1:
hello!
Please input str2:
kitty
Catenated str1=hello!kitty
函数mystrcat也可以使用指针方式实现,main函数不用改动,代码如下:
void mystrcat(char *pstr1,char *pstr2)
{
/*将指针pstr1拨到字符串末尾*/
while(*pstr1) pstr1++;
/*在pstr2后添加pstr2的每个字符,注意循环最后一次拷贝了'\0'*/
while(*pstr1++=* pstr2++);
}