在strlwr()中使用字符串数据类型

Using string data type in strlwr()

本文关键字:字符串 数据类型 strlwr      更新时间:2023-10-16

strlwr中使用string作为数据类型时遇到问题,例如:

string a;
cout << "Enter a":; 
cin >> a;
strlwr(a);

突然我犯了一个错误!

"[错误]C:\Users\PC\Documents\C-Free\Temp\Untitled7.cpp:7:E2285在函数main()中找不到匹配的'_lstrlwr(string)'"

谁能解决这个问题?

代码中的第一个问题是,您有一个额外的双qoutes "

    string a;
cout<<"Enter a":"; cin>>a;
//            ^ this is extra
strlwr(a);

编写此代码的正确方法是

string a;
cout << "Enter a :";
cin >> a;
strlwr(a);

很好地使用空格可以帮助您发现此类错误,但在这种特殊情况下,语法高亮显示非常有用。

此外,不能将std::string传递给strlwr()——它不需要字符串,而是char *指针,或者更准确地说是c字符串。

这不是标准函数,如果您关心可移植性,则必须使用标准函数/方法。

要直接在string对象上执行此操作,可以尝试如下

#include <iostream>
#include <string>
int
main(void)
{
    std::string example = "ExAmPle";
    for (size_t i = 0 ; i < example.size() ; ++i)
    {
        char character = tolower(example[i]);
        example[i] = character;
    }
    std::cout << example;
    return 0;
}

strlwr不是C++库的一部分&因此它不起作用。您可以使用:-

for (char &ch:a)
    {
          ch = tolower(ch);
    }

还有另一种方法可以让链接器找不到_lstrlwr。我在Embarcadero®C++Builder 10 Seattle版本23.02061822.753上,并且经常出现这样的问题,尤其是在打乱了新项目中头文件的顺序之后。

暂时关闭预编译的头文件,直到项目更加稳定。我来这里是因为我也有一个丢失的_lstrlwr,以及其他的抱怨。关闭PCH解决了所有这些问题。