[英]Convert only first word of string to lower case
我有这个功能
char toLowerCase(char buf[]){
for(int i =0; buf[i]; i++){
buf[i] = tolower(buf[i]);
}
return *buf;
}
这给出了结果
INPUT: HELoooO OOOOO
RESULT: heloooo ooooo
我如何修改它,使其仅将第一个字符串转换为小写即。 在“”之后停止?
我尝试使用strtok,但是它在第一个字符串之后返回分段错误。
buf是一个char数组。 您不能只检查0(当前操作),还必须检查空格。 您可以使用&&运算符执行此操作:
for(int i =0; buf[i] && buf[i] != ' '; i++){
然后,如果buf [i]为\\ 0或buf [i]为空格,则条件触发。
只需在第一个空格后退出循环:
for (int i = 0; buf[i] && !isspace(buf[i]); ++i)
buf[i] = tolower(buf[i]);
isspace
在ctype.h
定义与tolower
。
有人会争辩说使用指针会使循环更具可读性,但在技术上是等效的。
for (char * s = buf; *s && !isspace(*s); ++s)
*s = tolower(*s);
如果要跳过前导空间,则需要稍微修改条件。
char * s = buf;
for (; *s && isspace(*s); ++s)
continue; /* skip leading space */
for (; *s && !isspace(*s); ++s)
*s = tolower(*s);
只需更改使for循环运行的条件即可:
void toLowerCase(char buf[]){
for(int i =0; buf[i] && buf[i] != ' '; i++){
buf[i] = tolower(buf[i]);
}
}
我还删除了返回值,因为返回的是字符串的第一个字符,我认为这不是您想要的( *buf
与buf[0]
相同)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.