递归函数int change(char*s)实现字符串空格后的字母转换成大写字母
时间: 2024-10-04 13:03:09 浏览: 32
递归函数 `change` 实现字符串中空格之后的字母转大写,通常会涉及到两个步骤:遍历字符串并忽略空格,然后将非空格字符转换为大写。这里是一个简单的 C 语言实现示例:
```c
#include <ctype.h>
#include <string.h>
int change(char *s) {
if (*s == '\0') { // 如果到达字符串结束
return s; // 就直接返回空字符串
} else if (isspace(*s)) { // 如果遇到空格
return change(s + 1); // 跳过空格继续处理下一个字符
} else { // 遇到非空格字符
*s = toupper(*s); // 转换为大写并返回指针
return s;
}
}
// 示例使用
void convert_string_to_uppercase(char *input) {
char *result = change(input);
while (*result != '\0') {
printf("%c", *result++);
}
// 输出结束后,result 指向的是原字符串结尾,所以需要手动结束
printf("\n");
}
相关问题
用c++编写函数reverse(char *s)的倒序递归程序,使字符串s倒序。
在 C++ 中,你可以通过递归的方式实现字符串反转。这里是一个简单的递归函数 `reverse` 的例子:
```cpp
#include <iostream>
using namespace std;
// 递归函数,接收指向字符串起始位置的指针
void reverse(char* start, char* end) {
// 递归终止条件:当start超过end时,表示已经到达字符串中心,退出递归
if (start >= end)
return;
// 交换当前字符和末尾字符
char temp = *start;
*start = *end;
*end = temp;
// 继续递归处理剩余部分
reverse(start + 1, end - 1);
}
// 主函数演示如何使用
int main() {
char s[] = "Hello, World!";
int len = strlen(s); // 获取字符串长度
cout << "Original string: " << s << endl;
reverse(s, s + len - 1); // 反转字符串
cout << "Reversed string: " << s << endl;
return 0;
}
```
这个程序首先计算字符串的长度,然后从两端开始逐个字符地交换,直到相遇。请注意,由于递归操作可能会导致栈溢出对于非常长的字符串,所以实际应用中通常会考虑非递归的方式来实现。
1.分别用循环结构和递归求字符串S的长度. 函数:int Slen(char*s).
当然可以。下面是用循环结构和递归结构分别实现求字符串S长度的函数。
**循环结构实现**
在循环结构中,我们可以遍历字符串的每个字符,直到遇到字符串的结尾(null字符)。以下是C语言的实现:
```c
#include <stdio.h>
int Slen(char* s) {
int len = 0;
while(*s != '\0') {
len++;
s++;
}
return len;
}
```
在这个函数中,我们使用了一个while循环,只要字符串s中还有字符,就增加长度计数器len的值,并将指针s向后移动一位。当遇到字符串结尾的null字符时,循环结束,返回长度。
**递归结构实现**
递归结构通常用于解决一些可以直接或间接地分解为更小的问题的情况。对于求字符串长度的问题,我们可以将问题分解为求单个字符的长度,再将这些长度累加起来。以下是C语言的递归实现:
```c
#include <stdio.h>
int Slen(char* s) {
if(*s == '\0') { // 基本情况:字符串为空,长度为0
return 0;
} else {
return 1 + Slen(s+1); // 递归情况:字符串非空,当前字符的长度为1,加上下一个字符的长度即可
}
}
```
在这个函数中,我们首先检查字符串是否为空。如果是,则返回0(空字符串的长度为0)。否则,我们将当前字符的长度设为1(因为一个字符的长度总是1),然后递归地计算下一个字符的长度并加到总长度上。当所有字符都被处理完时,递归结束,返回总长度。
阅读全文