分别用字符数组和字符指针做参数函数,用两种方法编程实现字符串链接函数strcat()的功能
时间: 2023-12-18 08:02:07 浏览: 46
使用字符数组作为参数的函数实现:
```
void strcat_array(char str1[], char str2[]) {
int i = 0, j = 0;
while (str1[i] != '\0') {
i++;
}
while (str2[j] != '\0') {
str1[i++] = str2[j++];
}
str1[i] = '\0';
}
```
使用字符指针作为参数的函数实现:
```
void strcat_pointer(char *str1, char *str2) {
while (*str1 != '\0') {
str1++;
}
while (*str2 != '\0') {
*str1++ = *str2++;
}
*str1 = '\0';
}
```
两种方法的实现原理都是将第二个字符串拼接到第一个字符串的末尾。使用字符数组作为参数的函数需要事先预留足够的空间,而使用字符指针作为参数的函数则可以自动调整空间大小。
相关问题
请分别用字符数组和字符指针做函数参数,用两种方法编程实现字符串连接函数strcat()的功能。
### 回答1:
使用字符数组作为函数参数:
```c
void my_strcat(char dest[], const char src[]) {
int i = , j = ;
while (dest[i] != '\') {
i++;
}
while (src[j] != '\') {
dest[i] = src[j];
i++;
j++;
}
dest[i] = '\';
}
```
使用字符指针作为函数参数:
```c
void my_strcat(char *dest, const char *src) {
while (*dest != '\') {
dest++;
}
while (*src != '\') {
*dest = *src;
dest++;
src++;
}
*dest = '\';
}
```
两种方法的实现原理都是先找到目标字符串的末尾,然后将源字符串中的字符逐个复制到目标字符串的末尾,最后在目标字符串的末尾添加一个空字符。使用字符数组作为函数参数时,需要使用下标来访问数组元素;使用字符指针作为函数参数时,需要使用指针来访问字符串中的字符。
### 回答2:
字符数组和字符指针是C语言中常用的两种字符串表示方法。既然需要实现字符串连接函数strcat(),那么首先需要明确该函数的功能:将源字符串连接到目标字符串的末尾。
首先,我们来看看如何用字符数组来实现:
```c
void my_strcat(char dest[], const char src[]) {
int dest_len = strlen(dest);
for(int i = 0; src[i] != '\0'; i++) {
dest[dest_len + i] = src[i];
}
dest[dest_len + strlen(src)] = '\0';
}
```
该函数中,dest和src分别表示目标字符串和源字符串,都是字符数组类型。先计算出目标字符串的长度,然后逐个拷贝源字符串的字符到目标字符串的末尾,并替换掉原来的结尾符'\0'。
接下来,我们再看看如何用字符指针来实现:
```c
char* my_strcat(char* dest, const char* src) {
char* p = dest;
while(*p != '\0') {
p++;
}
while(*src != '\0') {
*p++ = *src++;
}
*p = '\0';
return dest;
}
```
该函数中,dest和src分别表示目标字符串和源字符串,都是字符指针类型。在函数的开头,先定义一个指针p指向目标字符串的末尾,然后逐个拷贝源字符串的字符到p所指向的位置,并前进指针,直到源字符串的结尾符'\0'。最后,再手动加上结尾符,返回目标字符串的首地址。
两种方法的原理类似,区别在于使用的字符串类型不同。用字符数组来实现,拷贝字符时可以直接根据下标访问数组元素;用字符指针来实现,需要通过指针来访问字符串中的每个字符。不管用哪种方法,都需要注意目标字符串的结尾符是否正确。
### 回答3:
字符数组在定义时需要指定长度,其长度不可变,因此使用字符数组作为函数参数时需要保证目标数组长度足够存储要连接的两个字符串。在函数实现时,要先遍历第一个字符串直到结尾,然后再遍历第二个字符串,将其复制到目标数组中第一个字符串的结尾位置即可。
具体代码如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
void my_strcat(char dest[], const char src[]) {
int len1 = strlen(dest);
int len2 = strlen(src);
for (int i = 0; i < len2; i++) {
dest[len1+i] = src[i];
}
}
int main() {
char s1[20] = "hello, ";
char s2[] = "world";
my_strcat(s1, s2);
cout << s1 << endl;
return 0;
}
```
字符指针在定义时不需要指定长度,可以根据实际情况灵活分配内存。使用字符指针作为函数参数时,需要注意传入的指针指向的内存空间是否足够存储要连接的两个字符串,如果不足则会导致内存溢出。在函数实现时,需要先遍历第一个字符串直到结尾,然后找到第一个字符串结尾的位置,在这个位置后面添加第二个字符串即可。
具体代码如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
void my_strcat(char* dest, const char* src) {
char* p = dest;
while (*p != '\0') {
p++;
}
while (*src != '\0') {
*p = *src;
p++;
src++;
}
*p = '\0';
}
int main() {
char* s1 = new char[20];
strcpy(s1, "hello, ");
char* s2 = new char[10];
strcpy(s2, "world");
my_strcat(s1, s2);
cout << s1 << endl;
delete[] s1;
delete[] s2;
return 0;
}
```
请分别用字符数组和字符指针做函数参数,用两种方法编程实现字符串连接函数strcat()的功能使用c语言
使用字符数组实现:
```c
#include <stdio.h>
#include <string.h>
char* myStrcat(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);
for (int i = 0; i < len2; i++) {
str1[len1 + i] = str2[i];
}
str1[len1 + len2] = '\0';
return str1;
}
int main() {
char str1[100] = "Hello";
char str2[] = "world!";
myStrcat(str1, str2);
printf("连接后的字符串:%s\n", str1);
return 0;
}
```
使用字符指针实现:
```c
#include <stdio.h>
#include <string.h>
char* myStrcat(char *str1, char *str2) {
char *p = str1;
while (*p) {
p++;
}
while (*str2) {
*p = *str2;
p++;
str2++;
}
*p = '\0';
return str1;
}
int main() {
char str1[100] = "Hello";
char str2[] = "world!";
myStrcat(str1, str2);
printf("连接后的字符串:%s\n", str1);
return 0;
}
```
两种方法的区别在于:使用字符数组实现需要计算字符串长度,并且需要遍历字符串进行连接;而使用字符指针实现则可以通过指针直接操作字符串,只需要遍历一次。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)