请编写函数,求左子串。 函数原型 char* StrLeft(char *dst, const char *src, int len); 说明:函数取源串 src 的前 len 个字符,保存到目的串 dst 中,函数值为 dst。若 len 值不正确,则自动修正。
时间: 2024-10-29 15:20:05 浏览: 10
在C语言中,你可以编写一个如下的`StrLeft`函数来实现这个功能:
```c
#include <string.h>
char* StrLeft(char *dst, const char *src, int len) {
// 检查输入长度是否合理
if (len <= 0 || src == NULL || dst == NULL) {
printf("Invalid input! Please provide a valid length and non-null pointers.\n");
return dst; // 如果长度小于等于0,或者指针为空,返回dst以防止意外覆盖
}
// 如果len大于src剩余字符数,截取src的全部字符
if (len > strlen(src)) {
len = strlen(src);
}
// 将src的前len个字符复制到dst
strncpy(dst, src, len); // 注意 strncpy不会添加'\0'
dst[len] = '\0'; // 手动添加终止符'\0'
return dst;
}
```
这个函数首先检查输入参数的合理性,然后根据实际情况计算并复制源串的前len个字符到目标字符串dst。如果len过大导致无法完全复制,它会自动截取src的所有可用字符。最后,确保dst以空字符'\0'结尾,表示字符串结束。
相关问题
请编写函数,求右子串。 函数原型 char* StrRight(char *dst, const char *src, int len); 说明:函数取源串 src 的后 len 个字符,保存到目的串 dst 中,函数值为 dst。若 len 值不正确,则自动修正。C语言
在C语言中,你可以编写一个名为`StrRight`的函数来实现这个功能。这个函数接收两个参数:一个是目标字符串`dst`,另一个是要提取右子串的源字符串`src`,还有一个整数`len`表示需要获取的字符数。函数返回的是`dst`的指针。
以下是一个简单的实现示例:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
char* StrRight(char* dst, const char* src, int len);
char* StrRight(char* dst, const char* src, int len) {
// 首先检查输入长度是否大于0,并且源字符串长度足够
if (len <= 0 || len > strlen(src)) {
len = strlen(src); // 如果len不正确,自动修正为源串长度
}
// 拷贝源字符串的最后len个字符到目标字符串
strncpy(dst, src + strlen(src) - len, len); // 注意加上减去len是为了从后往前取
dst[len] = '\0'; // 添加终止符'\0'
return dst;
}
int main() {
char str[] = "Hello, World!";
char result[20];
StrRight(result, str, 5); // 获取"World"部分
printf("Result: %s\n", result);
return 0;
}
```
在这个例子中,如果`len`过大,会截取源字符串的最后的部分。如果`len`小于等于0,函数会直接使用源字符串的整个长度。当你运行这个程序,它将输出"World"。
编写子串查找函数int find_ str(const char* str1, const char* str2),返回str2在str1中的位置。如果str2 在str1中不存在,那么返回-1。如果str2在str1中出现多次,那么以第1改出现为准。使用指针进行编写。
以下是使用指针实现的子串查找函数代码:
```c
int find_str(const char* str1, const char* str2) {
if (str1 == NULL || str2 == NULL)
return -1;
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len2 > len1)
return -1;
for (int i = 0; i < len1 - len2 + 1; i++) {
const char* p = str1 + i;
const char* q = str2;
while (*q != '\0' && *p == *q) {
p++;
q++;
}
if (*q == '\0')
return i;
}
return -1;
}
```
首先,我们对输入的参数进行了非空判断。如果str1或str2为空,则直接返回-1。
然后,我们获取了str1和str2的长度,并且判断了一下str2是否比str1长。如果是,说明str2不可能是str1的子串,直接返回-1。
接着,我们循环遍历str1中所有可能的子串,从第一个字符开始逐个比较。在每个位置上,我们都定义了两个指针p和q,分别指向当前位置和str2的开头。然后,我们逐个比较p和q所指向的字符,如果相等就继续比较,如果不相等就退出循环。如果q所指向的字符为'\0',说明str2已经全部匹配成功,直接返回当前位置i。
如果循环结束后还没有返回值,说明str2在str1中不存在,直接返回-1。
需要注意的是,在这个函数中,我们并没有修改str1和str2所指向的字符串。这是因为它们都是const char*类型的指针,不能修改它们所指向的内容。
阅读全文