c - 如何递归地使字符串中所有单词的首字母大写?
问题描述
我想知道我该怎么做这个。我不想要任何迭代或 isalpha() 和 toupper() 函数。我们想使用我们自己的代码来读取输入。我们假设用户输入所有字符小写。这是我迄今为止尝试过的:
define MAX_LENGTH 100
int read_line(char str[],int);
void capitalize(char[]);
int main (void){
char A[MAX_LENGTH];
printf("Enter a text \n");
read_line(A, MAX_LENGTH);
capitalize(A);
puts(A);
}
int read_line(char str[],int n){
int ch,i=0;
while ((ch = getchar()) != '\n'){
if(i<MAX_LENGTH)
str[i++] = ch;
}
str[i] = '\0';
return i;
}
void capitalize(char str[]){
int x = strlen(str);
static int i = 0;
if(str[i]=='\0')
return;
if(str[i-1]==' '|| i == 0)
str[i] -= 32;
i++;
return capitalize(&str[i]);
}
输出是这样的:
输入文字:
自卫队自卫队
自卫队 自卫队 df
我的代码有什么问题?
解决方案
主要问题是您同时使用索引和递归,简单的递归解决方案是:
void capitalize(char* str, bool start){
if (!*str) return; // end as soon as \0 is met
if (start)
if (*str >= 'a' && *str <= 'z') *str = (*str - 'a') + 'A'; // capitalize latin letters
capitalize(str + 1, *str == ' '); // work with next symbol
}
应该称为capitalize(str, true)
推荐阅读
- scala - 如何编写一个 scala 函数来接受两种类型的参数?
- javascript - 了解 Jquery-Cropper 单位
- java - 即使调试正常,休眠也不删除对象?
- cassandra - Cassandra INSERT 和 UPDATE 语句失败 - 意外异常
- ruby-on-rails-4 - 在 Heroku 上使用 ImageMagick/MiniMagick 在 Rails 中将 TIFF 转换为 PDF
- sed - 两个命令的输出需要添加为列 awk
- kubernetes - 从已完成的 Kubernetes 批处理作业中复制文件
- django - 搜索功能什么都不返回 - Django
- swift - Xcode 10 中的离子发布
- php - FPDF 多单元格相同高度