封装函数实现strcat
时间: 2023-07-25 16:36:09 浏览: 54
好的,我可以为您提供一个简单的封装函数来实现strcat:
```C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* my_strcat(char* dest, const char* src) {
if (dest == NULL || src == NULL) {
return NULL;
}
char* p = dest + strlen(dest);
while (*src != '\0') {
*p++ = *src++;
}
*p = '\0';
return dest;
}
int main() {
char str1[20] = "Hello";
char str2[10] = "world";
printf("%s\n", my_strcat(str1, str2));
return 0;
}
```
在这个封装函数中,首先判断传入的参数是否为NULL,然后使用指针p指向目标字符串的末尾,循环将源字符串中的字符依次拷贝到目标字符串的末尾,最后在目标字符串的末尾添加'\0',并返回目标字符串的地址。在主函数中,我们定义两个字符串str1和str2,并使用my_strcat函数将它们进行拼接,并输出结果。
相关问题
1、封装子函数实现char *strcat(char *str,const char *dest)(8分)
可以使用以下代码来封装子函数实现`strcat`函数:
```c
char *strcat(char *str, const char *dest) {
char *temp = str;
// 将指针移到字符串末尾
while (*temp) {
temp++;
}
// 拷贝dest字符串到str末尾
while (*dest) {
*temp = *dest;
temp++;
dest++;
}
// 添加字符串结束符
*temp = '\0';
return str;
}
```
这个函数接受两个参数,`str`是目标字符串,`dest`是要追加的字符串。它会将`dest`字符串追加到`str`字符串的末尾,并返回拼接后的字符串。注意,这个函数假设`str`有足够的空间来容纳`dest`字符串的内容。
用c++写一个string类的封装
下面是一个简单的 C++ string 类的封装,包含了一些常用的字符串操作方法:
```c++
#include <iostream>
#include <cstring>
class String {
public:
// 默认构造函数
String() : m_data(nullptr), m_size(0) {}
// 构造函数
String(const char* str) : m_data(nullptr), m_size(0) {
if (str != nullptr) {
m_size = strlen(str);
m_data = new char[m_size + 1];
std::strcpy(m_data, str);
}
}
// 拷贝构造函数
String(const String& other) : m_data(nullptr), m_size(0) {
if (other.m_data != nullptr) {
m_size = other.m_size;
m_data = new char[m_size + 1];
std::strcpy(m_data, other.m_data);
}
}
// 析构函数
~String() {
if (m_data != nullptr)
delete[] m_data;
}
// 获取字符串长度
size_t size() const {
return m_size;
}
// 获取字符串是否为空
bool empty() const {
return m_size == 0;
}
// 获取 C 风格字符串
const char* c_str() const {
return m_data;
}
// 重载赋值运算符
String& operator=(const String& other) {
if (this == &other)
return *this;
if (m_data != nullptr)
delete[] m_data;
m_size = other.m_size;
m_data = new char[m_size + 1];
std::strcpy(m_data, other.m_data);
return *this;
}
// 重载加号运算符
String operator+(const String& other) const {
String result;
result.m_size = m_size + other.m_size;
result.m_data = new char[result.m_size + 1];
std::strcpy(result.m_data, m_data);
std::strcat(result.m_data, other.m_data);
return result;
}
// 重载加等于运算符
String& operator+=(const String& other) {
*this = *this + other;
return *this;
}
// 重载下标运算符
char& operator[](size_t index) {
return m_data[index];
}
const char& operator[](size_t index) const {
return m_data[index];
}
private:
char* m_data;
size_t m_size;
};
int main() {
String str1("Hello");
String str2(" World");
str1 += str2;
std::cout << str1.c_str() << std::endl;
return 0;
}
```
这个封装的 string 类比较简单,只包含常用的一些操作方法。如果需要更加完善的 string 类,可以参考 C++ 标准库中的 std::string 类的实现。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)