|
在讲到关于string.h中的一些字符操作函数的时候,老师留的作业,说模仿strcat写一个可以连接两个字符串的函数
想了很久写不出,后面讲到了指针,声明指针为 tpye * 指针名,比如 char* str1,那么直接输出 str1就是输出的str1r指向变量的内存地址,如果想输入str1指向的变量本身,那么使用* str1可以了,但是我在实际写代码中,发现这样写VS就报错.
我思考后写出的完成作业的代码:
//仿照strcat()的功能,写一个函数,来连接两个字符串
#include "stdafx.h"
#include <iostream>
using namespace std;
char * like_strcat( char * str1, char * str2)
{
//此处不应该是使用*str1 *str2吗?
cout << str1 << str2 << endl;
return 0;
//我这样写的实际不算是连接在一起了,不知道老师的标准答案在哪里.
}
int main()
{
char * a = "this is";
char * b = "my first c++ program!";
cout << like_strcat(a, b)<< endl;
return 0;
}
//还有就是如果我申明两个字符数组来接收str1,和str2就报错
比如
char stra[] = str1;这样写就是错误的
char stra[] = "this is a string";这样写就是OK的
这里让我迷糊
如果我申明两个数组来接收两个字符串,拼接
char stra[] = str1;
char strb[] = str2;
char stra[] +=char strb[];这样写也是错的
希望老师能指点一下.上面的一些疑问,和我写的这个答案是否是正确的.
本帖最后由 screen_ok 于 2022-2-22 08:21 编辑
if (NULL == str1) return NULL; // 判断指针是否为空,因为下面要对该指针进行引用(即 *str1),引用空指针会出错,你可以自己试一下。
if (NULL != str2) // 与上面同理,防止引用空指针出错
{
char* str = str1 + strlen(str1); // 定义一个指针变量(名为str),指向 str1 的末尾 (str1 + strlen(str1)), 不包括末尾的0.
while (*str++ = *str2++); // 循环赋值,把 str2 中字符放到 str1 中,同时判断 *str 的值不为0
}
其中的 while (*str++ = *str2++); 可以写成以下形式:
do
{
*str = *str2;
++str2; // 指针值加一,就是指向字符串中的下一个字符
++str;
} while (0 != *str);
也等同于下面形式(这是最好理解的形式了吧?!):
- int len = strlen(str1);
- for (int i = 0; str2[i] != 0; ++i)
- {
- str1[len + i] = str2[i];
- }
- str1[len + i] = 0;
复制代码
|
上一篇: CImage类中的StretchBlt(HDC hDestDC, const RECT& rectDest...下一篇: 如何用系统托盘做一个进度条(一点击系统托盘,他就在上面显示进度条)
|