c语言递归法求字符串长度
时间: 2023-09-14 21:12:10 浏览: 66
下面是使用递归法求字符串长度的 C 语言代码:
```c
#include <stdio.h>
int str_length(char *str) {
if (*str == '\0') { // 当遇到字符串末尾时,返回 0
return 0;
} else {
return 1 + str_length(str + 1); // 递归调用,返回下一个字符的长度加一
}
}
int main() {
char str[] = "Hello, world!";
int len = str_length(str);
printf("The length of the string \"%s\" is %d.\n", str, len);
return 0;
}
```
代码解释:
在 `str_length` 函数中,首先判断当前字符是否为字符串末尾的 `\0`,如果是,返回 0,表示字符串长度为 0。如果不是末尾字符,则递归调用 `str_length` 函数,并返回下一个字符的长度加一。
在 `main` 函数中,定义一个字符串 `str`,并调用 `str_length` 函数求出其长度,最后将结果打印输出。
相关问题
字符串匹配 分治法c语言
字符串匹配问题可以使用分治法来解决。下面是一个使用C语言编写的字符串匹配算法,使用分治法实现。
```c
#include <stdio.h>
#include <string.h>
// 分治法字符串匹配函数
int match(char* text, char* pattern, int n, int m) {
// 如果模式串长度为0,直接返回匹配成功
if (m == 0) {
return 1;
}
// 如果文本串长度小于模式串长度,直接返回匹配失败
if (n < m) {
return 0;
}
// 计算中间位置,将文本串分成两段
int mid = n / 2;
// 比较左半部分和模式串
int left = match(text, pattern, mid, m);
// 比较右半部分和模式串
int right = match(text + mid, pattern, n - mid, m);
// 如果左半部分或右半部分匹配成功,返回匹配成功
if (left || right) {
return 1;
}
// 否则,比较中间位置的字符和模式串第一个字符
// 如果相等,比较中间位置后面的文本串和模式串
if (text[mid] == pattern[0]) {
for (int i = 0; i < m; i++) {
if (text[mid + i] != pattern[i]) {
return 0;
}
}
return 1;
}
// 如果中间位置的字符和模式串第一个字符不相等,返回匹配失败
return 0;
}
int main() {
char text[] = "hello, world!";
char pattern[] = "world";
int n = strlen(text);
int m = strlen(pattern);
int result = match(text, pattern, n, m);
if (result) {
printf("匹配成功\n");
} else {
printf("匹配失败\n");
}
return 0;
}
```
该算法的时间复杂度为O(nlogn),其中n为文本串长度。由于使用了递归,空间复杂度为O(logn)。
字符串匹配 分治法c语言实现
字符串匹配问题可以使用分治法来解决。具体实现步骤如下:
1. 将模式串和文本串分别划分成两半,分别为左半部分和右半部分。
2. 对于模式串的左半部分,在文本串的左半部分中进行匹配。
3. 对于模式串的右半部分,在文本串的右半部分中进行匹配。
4. 如果左半部分和右半部分都匹配成功,则匹配成功。
5. 如果左半部分和右半部分有一个匹配失败,则继续递归分治调用。
下面是使用C语言的代码实现:
```c
#include <stdio.h>
#include <string.h>
int match(char *text, char *pattern) {
int n = strlen(text);
int m = strlen(pattern);
if (m == 0) {
return 1;
}
if (n < m) {
return 0;
}
int i, j, k;
int mid = m / 2;
for (i = 0; i <= n - m; i++) {
if (text[i] == pattern[mid]) {
for (j = i, k = 0; k < mid; j++, k++) {
if (text[j] != pattern[k]) {
break;
}
}
if (k == mid && match(text + j, pattern + mid + 1)) {
return 1;
}
}
}
return 0;
}
int main() {
char text[100], pattern[100];
printf("Enter text: ");
fgets(text, sizeof(text), stdin);
text[strlen(text) - 1] = '\0';
printf("Enter pattern: ");
fgets(pattern, sizeof(pattern), stdin);
pattern[strlen(pattern) - 1] = '\0';
if (match(text, pattern)) {
printf("Match found\n");
} else {
printf("Match not found\n");
}
return 0;
}
```
在上面的代码中,`match`函数用于进行字符串匹配。它接受两个参数,分别为文本串和模式串。在函数中,首先判断了模式串为空的情况,如果模式串为空,则直接返回1。然后判断了文本串的长度是否小于模式串的长度,如果是,则直接返回0。接下来,将模式串和文本串分别划分成两半,并对左半部分和右半部分进行匹配。如果左半部分和右半部分都匹配成功,则匹配成功。如果左半部分和右半部分有一个匹配失败,则继续递归分治调用。最后,在`main`函数中,输入文本串和模式串,并调用`match`函数进行匹配,输出匹配结果。