#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int i;
char s[100];
cin >> s;
for(i=0;i<strlen(s);i++)
{
if(islower(s[i])==1)
{
s[i]=strupr(s[i]);
cout << s[i];
}
else
{
s[i]=strlwr(s[i]);
cout << s[i];
}
}
return 0;
}
这两行即 s[i]=strupr(s[i])
和 s[i]=strlwr(s[i])
显示此错误:
invalid conversion from char to char*.
我该如何解决?谢谢。
最佳答案
您应该改用这两个:
s[i] = std::toupper(s[i]);
s[i] = std::tolower(s[i]);
记得包括 <cctype>
.这里是一些文档的链接 std::toupper和 std::tolower .
问题是 strupr
和 strlwr
处理整个字符串,而不是单个字符。此外,它们就地运行并且是非标准的。
旁注:
您可以考虑使用 std::string s
而不是 char s[100]
, 这消除了 cin >> s;
中的当前溢出机会.
更新:
可以使用 std::transform像这样:
std::transform(std::begin(s), std::end(s), std::begin(s), [] (char c) { return std::islower(c) ? std::toupper(c) : std::tolower(c); });
使用 std::begin(s)
的一个好处和 std::end(s)
是它适用于 std::string
, std::vector
甚至char[100]
.
关于c++ - 使用strupr和strlwr时报错 "invalid conversion of char to char*"如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43468474/