c - 创建一个函数,将每个单词的第一个字母大写并将所有其他字母转换为小写
问题描述
我有这个练习将给定句子中的第一个字符大写。请我不明白“i - 1”和str [i - 1]是什么意思
#include <stdio.h>
char* ft_strcapitalize(char *str)
{
int i;
i = 0;
while (str[i])
{
if ((i - 1 == 0 && str[i] != ' ')
|| (str[i - 1] >= 'a' && str[i - 1] <= 'z')
|| (str[i - 1] >= 'A' && str[i - 1] <= 'Z')
|| (str[i - 1] >= '1' && str[i - 1] <= '9'))
{
}
else if (str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32;
i++;
}
return (str);
}
int main(void)
{
char s[] = "salut, comment tu vas ? 42mots quarante-deux; cinquante+et+un";
ft_strcapitalize(s);
printf("%s", s);
}
解决方案
请我不明白“i - 1”和 str[i - 1] 是什么意思
str[i - 1]
尝试访问字符串中的前一个字符 - 之前的那个str[i]
。使用 when 是不好的代码i==0
。
创建一个函数,将每个单词的第一个字母大写并将所有其他字母转换为小写
保持一个状态变量标识下一个字符可能开始一个句子。使用<ctype.h>
.
#include <ctype.h>
#include <stdbool.h>
char* ft_strcapitalize(char *str) {
size_t i = 0;
bool start = true;
while (str[i]) {
if (start && isalpha(str[i])) {
str[i] = toupper(str[i]);
start = false;
} else {
str[i] = tolower(str[i]);
// TBD: Adjust 'start' detection as needed.
if (str[i] == '.' || str[i] == '?' || str[i] == '!') {
start = true;
}
}
i++;
}
return str;
}
推荐阅读
- c# - linq 查询中未处理的项目
- ios - 如何在 swift 中使用不同的原型单元构建 UITableViewController
- android - Firebase实时数据库应用程序在离线时执行许多操作后恢复在线时冻结
- php - php - joomla:奇怪的语法错误仅发生在本地主机中
- apache-kafka - Keycloak如何与kafka集成?
- c# - 触摸屏上的 ScrollViewer ZoomMode
- matrix - 如何从 eigen 中的稀疏矩阵求解器获得准确的结果
- angularjs - 如果与谷歌地址自动完成一起使用,ngmodel 不能在文本框中保存地址
- cordova - 开发 Cordova 插件的最佳 IDE 是什么?
- debian - 我建立了 vlc 但没有任何接口 (linux)