c - 我怎样才能得到单词的第一个元素并将其转换为大写字母,而其他所有字母都转换为小写字母?
问题描述
我编写了一个程序,它可以反转数组中的每个单词,但我的问题是我想要一个单词的第一个字母大写,其他所有字母小写。
C
#include <stdio.h>
#include<stdlib.h>
#include<ctype.h>
char * reversePrint( char *name )
{
char *input_string = name;
char temp;
while (*input_string)
{
char *t = input_string;
/* End of non Whitespace sequence */
while (*t && *t == (unsigned char)*t && !isspace(*t))
{
t++;
}
if (t - input_string > 1)
{
/* Non whitespace Sequence >1*/
char *e = t;
/* Reverse Words */
do
{
char temp = *input_string;
*input_string++ = *--e;
*e = temp;
}
while (input_string < e);
//Paste reversed Sequence
input_string = t;
}
else
{
//Non whitepace skip
input_string++;
}
}
return name;
}
int main( void )
{
char s[] = "I love Pizza";
printf("%s", reversePrint(s));
return 0;
}
所以我的问题是我得到的结果是我 Evol azziP 但我必须有我 evol Azzip
谁能帮我吗?
解决方案
您可以使用以下内容:
- 使单词的所有第一个字符都大写。
- 使所有其他小写
我已经使代码冗长,以便您更容易理解发生了什么。它可以重构为更紧凑的代码。
void make_upper(char* line)
{
bool first = true;
while(*line)
{
if(*line != ' ' && !first)
{
*line = tolower(*line);
}
//non first char of a word
if(*line != ' ' && first)
{
*line = toupper(*line);
first = false;
}
//new word ahead
if(*line == ' ')
first = true;
line++;
}
}
其中产生:Nomis Tbeil !azzip
附带说明一下,反向打印功能非常难以阅读。不要编写冗长而复杂的函数,而是编写小型且可重用的函数,并通过将这些小块一起使用来构建复杂的功能。
您能想象一家汽车制造商一次性组装所有机器部件吗?你能想象在组装底盘的地方组装活塞或电子设备吗?将是一个巨大的混乱。发动机是单独组装的,只有在完成后才能与汽车的其余部分组装在一起。对软件做同样的事情。
推荐阅读
- javascript - 顶点页面准备好时返回的自定义 cypress 命令
- nlp - 解决单词多义/同音的最先进算法是什么?
- r - 为什么匹配的结果取决于数据的顺序(MatchIt 包)?
- python - Python 请求中的 CURL -T(--upload-file 等效项)
- c# - XML 文件中的 Linq 请求
- maven - 需要一个 Jenkins 作业,在运行自身之前先构建其所有依赖关系树
- git - 从 Git 分支中删除功能,然后将其合并回来?
- typo3 - 如何在 TYPO3 版本 9 中包含 Header.html 部分
- output - 更改 esttab 输出的顺序
- javascript - 从字段中计算 2 个值,但无法正常工作