std::string 如何转换成小写
时间: 2024-01-12 17:21:22 浏览: 89
要将`std::string`转换为小写,可以使用`std::transform`函数结合`std::tolower`函数。以下是一个示例:
```cpp
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
int main() {
std::string str = "ConVert Me tO LoWErCasE";
std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) { return std::tolower(c); });
std::cout << str << std::endl;
return 0;
}
```
在这个示例中,我们使用了一个lambda表达式作为`std::transform`的第四个参数,它将每个字符转换为小写。`std::tolower`函数是C++标准库中的一个函数,用于将字符转换为小写。
相关问题
#include <iostream> #include <string> #include <cstring> #include <ctype.h> std::string solution(std::string words, std::string msg){ std::string result; // TODO: int tStrLenW = words.length(); int tStrLenM = msg.length(); int tWordsFlag = 0; int tMsgFlag = 0; char* pCharText = new char[tStrLenW + 1]; memset(pCharText, 0, tStrLenW + 1); while(tStrLenW > tWordsFlag && tStrLenM > tMsgFlag) { if( words[tWordsFlag] == msg[tMsgFlag] ) { pCharText[tMsgFlag] = msg[tMsgFlag]; //strcat(pCharText, &msg[tMsgFlag]); tMsgFlag++; } else { tWordsFlag++; tMsgFlag = 0; } } if(strcasecmp(pCharText, msg.c_str()) == 0) result = "Yes"; else result = "No"; return result; } int main() { std::string words; std::string msg; getline(std::cin, words);; getline(std::cin, msg);; std::string result = solution(words, msg); std::cout<<result<<std::endl; return 0; } 程序缺陷,程序修改
此程序的主要缺陷是在使用 `strcasecmp` 比较字符串时,会出现未初始化的情况,因为 `pCharText` 在某些情况下可能没有被完全填充。此外,`pCharText` 的大小只为 `tStrLenW+1`,但是在循环中我们使用 `tMsgFlag` 来填充 `pCharText`,而 `tMsgFlag` 的大小应该是 `tStrLenM+1`。
以下是对程序的修改建议:
1. 在循环开始前,将 `pCharText` 数组全部初始化为字符 `' '`,这样可以确保所有未匹配的字符都被填充为一个空格字符。
2. 在循环中,将 `pCharText` 数组的下标改为 `tWordsFlag`,这样可以确保只填充 `tWordsFlag` 对应的位置,而不是 `tMsgFlag` 对应的位置。
3. 在循环结束后,将 `pCharText` 数组的最后一个元素设为 `'\0'`,以确保字符串以 `'\0'` 结尾。
4. 在使用 `strcasecmp` 比较字符串前,先将 `pCharText` 数组中的所有字符转换为小写字母,以确保比较的是同一种大小写形式的字符串。
5. 在使用完 `pCharText` 数组后,需要将其释放掉,避免内存泄漏。
修改后的程序如下所示:
```
#include <iostream>
#include <string>
#include <cstring>
#include <ctype.h>
std::string solution(std::string words, std::string msg){
std::string result;
int tStrLenW = words.length();
int tStrLenM = msg.length();
int tWordsFlag = 0;
int tMsgFlag = 0;
char* pCharText = new char[tStrLenM + 1];
memset(pCharText, ' ', tStrLenM);
pCharText[tStrLenM] = '\0';
while(tStrLenW > tWordsFlag && tStrLenM > tMsgFlag) {
if( words[tWordsFlag] == msg[tMsgFlag] ) {
pCharText[tWordsFlag] = msg[tMsgFlag];
tWordsFlag++;
tMsgFlag++;
} else {
tWordsFlag++;
tMsgFlag = 0;
}
}
for (int i = 0; i < tStrLenM; i++) {
pCharText[i] = tolower(pCharText[i]);
}
if(strcasecmp(pCharText, msg.c_str()) == 0) result = "Yes";
else result = "No";
delete[] pCharText;
return result;
}
int main() {
std::string words;
std::string msg;
getline(std::cin, words);
getline(std::cin, msg);
std::string result = solution(words, msg);
std::cout<<result<<std::endl;
return 0;
}
```
std::string转小写
要将std::string转换为小写,可以使用C++标准库中的transform函数。你可以使用以下代码来实现:
```
#include <string>
#include <algorithm>
#include <cctype>
std::string toLowerCase(std::string s) {
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c){ return std::tolower(c); });
return s;
}
int main() {
std::string str = "Hello World";
std::string lowerStr = toLowerCase(str);
// lowerStr 现在包含 "hello world"
return 0;
}
```
在这个例子中,我们定义了一个名为toLowerCase的函数,它接收一个std::string作为参数,并使用transform函数将字符串中的每个字符转换为小写。然后,我们在main函数中调用toLowerCase函数将字符串转换为小写,并将结果存储在lowerStr变量中。最后,lowerStr就包含了转换为小写的字符串。
请注意,我们在transform函数中使用了一个lambda函数来执行具体的转换操作。lambda函数接受一个字符作为输入,并返回转换后的字符。在这种情况下,我们使用std::tolower函数来将字符转换为小写。
因此,可以使用上述代码来实现将std::string转换为小写的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文