c++ - 使用strupr和strlwr时报错 "invalid conversion of char to char*"如何解决?

标签 c++ string

#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::toupperstd::tolower .

问题是 struprstrlwr处理整个字符串,而不是单个字符。此外,它们就地运行并且是非标准的。

旁注:

您可以考虑使用 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/

相关文章:

javascript - 在 JavaScript 中查找两个字符串之间的差异

c++ - 传递对 std::ifstream 的引用作为参数

c++ - 关于斐波那契数列的程序

c++ - Qt 更改来自另一个类的标签文本

c++ - 如何在标准 C++11 中创建 shared_lock 或 upgrade_lock?

java - 字符串比较没有返回正确的答案

python - 在 pandas DataFrame 中用 NaN 替换字符串(来自列表)

javascript - 为什么 Ext flash 组件连接两个字符串来形成这个 url?

c# - D 的作用域失败/成功/退出是否必要?

javascript - 读取字符串并拆分它