繁体   English   中英

仅将字符串的第一个单词转换为小写

[英]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]);

isspacectype.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]);
  }
}

我还删除了返回值,因为返回的是字符串的第一个字符,我认为这不是您想要的( *bufbuf[0]相同)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM