C 仅将字符串的第一个字转换为小写
我有这个功能C 仅将字符串的第一个字转换为小写,c,C,我有这个功能 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是一个字符数组。您不能只检查0(您
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是一个字符数组。您不能只检查0(您当前所做的),还必须检查空白。您可以使用&&运算符执行此操作:
for(int i =0; buf[i] && buf[i] != ' '; i++){
如果buf[i]是一个\0或buf[i]是一个空格,则会触发该条件。buf是一个字符数组。您不能只检查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]);
在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 (int i = 0; buf[i] && !isspace(buf[i]); ++i)
buf[i] = tolower(buf[i]);
在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]
相同)。只需更改保持for循环运行的条件:
void toLowerCase(char buf[]){
for(int i =0; buf[i] && buf[i] != ' '; i++){
buf[i] = tolower(buf[i]);
}
}
我还删除了返回值,因为您返回的是字符串的第一个字符,我认为这不是您想要的(
*buf
与buf[0]
相同)。哦,我不知道您可以这样做。看看5gon12eders的答案。它比我的好,因为它使用isspace。你可以在循环中检查你想要的任何东西。您甚至不必检查与循环有关的任何内容(即使在大多数情况下,这也是毫无意义和/或不好的做法)。Ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh只要您的字符串不包含空格以外的空格字符(例如制表符),除了isspace
可能会稍微慢一点之外,没有什么区别。当地点发挥作用时,真正的优势就会显现出来。我更喜欢isspace
,因为更直接地阅读代码会告诉我它意味着什么。你说得很对,我只是现在没有想到这一点。我会在我的代码中使用它。我不认为它是值得注意的慢,只要你不分析整本书…哦,我不知道你可以这样做。看看5gon12eders的答案。它比我的好,因为它使用isspace。你可以在循环中检查你想要的任何东西。您甚至不必检查与循环有关的任何内容(即使在大多数情况下,这也是毫无意义和/或不好的做法)。Ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh只要您的字符串不包含空格以外的空格字符(例如制表符),除了isspace
可能会稍微慢一点之外,没有什么区别。当地点发挥作用时,真正的优势就会显现出来。我更喜欢isspace
,因为更直接地阅读代码会告诉我它意味着什么。你说得很对,我只是现在没有想到这一点。我会在我的代码中使用它。我不认为这是值得注意的慢,只要你不解析整本书。。。