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

时间:2015-12-06 04:54:38

标签: c++ visual-c++

我在string中使用strlwr作为数据类型时遇到问题:

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

突然间我收到错误!

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

谁能解决这个问题?

3 个答案:

答案 0 :(得分:3)

您的代码中的第一个问题是,您有一个额外的双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 *指针,或者更确切地说是字符串。

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

要直接在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;
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

还有另一种方法可以让链接器无法找到_lstrlwr。 我在Embarcadero®C++ Builder 10 Seattle Version 23.0.20618.2753上, 并且经常遇到这样的问题,尤其是在新项目中处理头文件的顺序之后。

关闭pre =编译的头文件一段时间,直到项目更稳定。我来到这里是因为我也失踪了_lstrlwr以及其他投诉。关闭PCH解决了所有这些问题。