c语言生成体验eTDD(easy TDD):在一个字符串中反向查找子串 参数: str, 源字符串 sub, 需查找的子串 返回: 如找到,返加子串的位置,否则返回-1
时间: 2024-02-13 16:07:55 浏览: 23
以下是使用C语言实现在一个字符串中反向查找子串的eTDD代码:
```
#include <string.h>
int reverse_strstr(char* str, char* sub) {
int str_len = strlen(str);
int sub_len = strlen(sub);
if (sub_len > str_len) {
return -1;
}
for (int i = str_len - sub_len; i >= 0; i--) {
if (memcmp(str + i, sub, sub_len) == 0) {
return i;
}
}
return -1;
}
```
在这个函数中,我们使用了C标准库函数`strlen`和`memcmp`。`strlen`用于获取字符串的长度,`memcmp`用于比较两个内存区域的内容是否相同。
首先,我们检查子串的长度是否大于源字符串的长度,如果是,则返回-1表示未找到。然后,我们从源字符串的末尾开始依次向前查找,每次比较子串和源字符串中当前位置开始的子串是否相同,如果相同,则返回当前位置的索引。
如果遍历整个源字符串都未找到子串,则返回-1表示未找到。
这个函数可以作为eTDD的测试代码,通过构造不同的源字符串和子串进行测试,确保函数的正确性。
相关问题
c语言实现体验eTDD(easy TDD):体验eTDD(easy TDD):将字符全部转为大写 参数: str, 需转为大写的字符串 返回: 返回结果字符串指针
好的,根据你的要求,我可以给你提供一个示例代码,这个代码使用C语言实现了将字符串转为大写的操作,并且采用了eTDD(easy TDD)的方法进行测试。代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/* 将字符串全部转为大写 */
char* str_to_upper(char* str) {
char* res = (char*)malloc(strlen(str) + 1);
int i = 0;
for (i = 0; str[i] != '\0'; i++) {
res[i] = toupper(str[i]);
}
res[i] = '\0';
return res;
}
/* 测试函数 */
void test_str_to_upper() {
char* str = "Hello, world!";
char* expected_res = "HELLO, WORLD!";
char* res = str_to_upper(str);
if (strcmp(res, expected_res) == 0) {
printf("test_str_to_upper passed\n");
} else {
printf("test_str_to_upper failed\n");
}
free(res);
}
/* 主函数 */
int main() {
test_str_to_upper();
return 0;
}
```
在上述代码中,我们首先定义了一个将字符串转为大写的函数`str_to_upper`,然后我们使用了eTDD的方法,编写了一个测试函数`test_str_to_upper`,该函数会调用`str_to_upper`函数,并根据预期结果判断测试是否通过。最后,在主函数中,我们调用了`test_str_to_upper`函数,来执行测试。
需要注意的是,这里的测试仅仅是一种简单的测试方法,实际上,在实际开发中,我们需要综合考虑多种情况,来构建更为完善的测试用例。
char* mid(char* des, int size, char* src, int first, int count) { int len_src,real_ceil_length; int k; char *i,*j; if(src == 0 || des == 0) { return 0; } i = src; len_src = 0; while(*i != '\0') {i++; len_src++; } i = src; if(first > len_src || first <= 0) { return des; } if((count > len_src - first + 1)||(count == -1)) { real_ceil_length = len_src - first + 1; } else { real_ceil_length = count; } if(real_ceil_length + 1 > size) { return des; } i = src + first - 1; j = des; for(k = 1;k <= real_ceil_length;k++) {*j = *i; i++; j++; } *j = '\0'; return des; } /* 体验eTDD(easy TDD):取得字符串的中间部分 参数: des, 保存结果字符串 size, 用于保存结果字符串的缓冲区长度 src, 源字符串 first, 开始位置 count, 取得的字符数,为-1时表示直到最后 返回: 返回结果字符串指针 */
这是一个函数,用于从源字符串中取出中间部分,然后将结果保存在目标字符串中。函数的参数包括:目标字符串指针、目标字符串缓冲区长度、源字符串指针、开始位置和取得的字符数。函数的返回值是结果字符串指针。
函数的实现过程包括:首先计算源字符串的长度,然后根据开始位置和取得的字符数计算出需要取出的中间部分的实际长度。接着进行边界检查,如果目标字符串缓冲区长度不足或者开始位置越界,则直接返回目标字符串指针。最后,从源字符串中取出中间部分并保存到目标字符串中,然后返回目标字符串指针。
该函数的命名并不规范,需要进行改进。另外,函数的注释应该更加详细,尤其是对参数和返回值的说明。同时,函数的实现也可以进行优化,提高代码的可读性和性能。