请编写函数实现将两个字符串连接(不使用库函数strcat)
时间: 2024-03-09 16:48:06 浏览: 78
好的,以下是一个示例函数实现:
```c
#include <stdio.h>
void my_strcat(char* dest, const char* src) {
// 找到dest的末尾
while (*dest) {
dest++;
}
// 将src的内容拷贝到dest的末尾
while (*src) {
*dest = *src;
dest++;
src++;
}
// 手动添加字符串结束符
*dest = '\0';
}
int main() {
char str1[20] = "hello";
char str2[] = "world";
my_strcat(str1, str2);
printf("%s\n", str1);
return 0;
}
```
函数`my_strcat`的参数包括`dest`和`src`,`dest`是目标字符串,`src`是要拼接到目标字符串末尾的字符串。
函数的实现过程很简单,首先使用`while`循环找到`dest`的末尾,然后使用第二个`while`循环将`src`的内容拷贝到`dest`的末尾,最后手动添加字符串结束符。
在`main`函数中,我们声明了两个字符串`str1`和`str2`,将`str2`拼接到`str1`的末尾,输出结果为`helloworld`。
相关问题
编写一个函数,实现求一个字符串的长度不得使用库函数strlen(),编写一个函数,实现字符串的拷贝不得使用库函数strcpy(),编写一个函数,实现两个字符串的连接,不得使用库函数strcat(),编写一个函数实现两个字符串的比较,不得使用库函数strcmp()。用c语言编写
在C语言中,可以分别手动编写四个函数来完成这些任务:
1. **计算字符串长度(无 strlen() 函数)**:
```c
#include <stdio.h>
#include <string.h>
size_t string_length(char* str) {
if (str == NULL) return 0;
size_t len = 0;
while (*str != '\0') {
++len;
str++;
}
return len;
}
```
2. **字符串拷贝(无 strcpy() 函数)**:
```c
void string_copy(char* dest, const char* src) {
if (dest == NULL || src == NULL) return;
while (*src) {
*dest++ = *src++;
}
*dest = '\0';
}
```
3. **字符串连接(无 strcat() 函数)**:
```c
char* string_concat(char* result, const char* str1, const char* str2) {
if (result == NULL || str1 == NULL || str2 == NULL) return NULL;
size_t len1 = string_length(str1);
size_t len2 = string_length(str2);
// 确保有足够的空间
result[len1] = '\0';
result += len1 + 1;
for (size_t i = 0; i < len2; ++i) {
result[i + len1] = str2[i];
}
result[len1 + len2] = '\0';
return result;
}
```
4. **字符串比较(无 strcmp() 函数)**:
```c
int string_compare(const char* str1, const char* str2) {
while (*str1 && *str2 && *str1 == *str2) {
str1++;
str2++;
}
if (*str1 == '\0') return 0; // str1 更长
else if (*str2 == '\0') return -1; // str2 更长
else return *str1 - *str2; // 字符不同
}
```
请注意,以上代码没有处理异常情况,例如输入空指针。在实际应用中,你需要添加适当的错误检查。
写一个函数,将两个字符串连接。 注:不要使用库函数 strcat,自己写函数实现。
当然可以。你可以创建一个简单的C语言函数,名为`string_concat`,它接受两个`char`类型的指针作为输入参数,并返回一个新的指向组合后的字符串的指针。这个函数会逐个字符地复制第一个字符串到第二个字符串之后,最后添加一个终止符'\0'来表示字符串结束。
```c
#include <stdio.h>
#include <stdlib.h> // 用于动态内存分配
// 定义函数,合并两个字符串并返回结果字符串的地址
char* string_concat(char* str1, char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
// 计算新字符串的总长度
int total_len = len1 + len2 + 1; // 加一是因为需要额外的空间存放'\0'
// 动态分配足够的空间存储新字符串
char* result = (char*)malloc(total_len * sizeof(char));
if (!result) { // 检查内存分配是否成功
printf("Memory allocation failed.\n");
return NULL;
}
// 将str1复制到新字符串
memcpy(result, str1, len1); // 使用memcpy避免逐个字符复制
// 将'\0'添加到str1的结尾,然后拷贝str2
result[len1] = '\0'; // 结束str1
memcpy(&result[len1+1], str2, len2); // 复制str2
result[len1+len2] = '\0'; // 结束str2
return result;
}
int main() {
char str1[] = "Hello, ";
char str2[] = "world!";
char* combined_str = string_concat(str1, str2);
if (combined_str != NULL) {
printf("Combined string: %s\n", combined_str);
free(combined_str); // 释放内存
}
return 0;
}
```
在这个例子中,`main`函数展示了如何使用`string_concat`来连接两个字符串。
阅读全文