我的电脑不接受s.length,但其他编译器也这样做

时间:2018-01-12 04:42:12

标签: c++ string function netbeans netbeans-8

使用某些功能和我的计算机/ NetBeans似乎无法运行我的代码,即使它可以在不同的编译器中运行。这是我的功能(请记住,这不是我的整个项目,我有一个int main()):

#include <iostream>
#include <iomanip>
#include <string>
#include <iterator>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
void convert (string& s){ //Creating a function that makes a variable lower case
    for(int i=0; i<s.length(); i++){ 
        s[i] = tolower(s[i]); //tolower lets me change to lower case
    }
}

我得到的错误是:“无法解析标识符长度”。如果你需要看看我的整个项目,请问,我不介意,只是觉得浪费时间,如果没关系。我正在使用NetBeans 8.2,提前感谢

2 个答案:

答案 0 :(得分:1)

您可以尝试使用size()代替length()。对于C ++中的string,它们之间没有显着差异,但size()也用于其他STL容器,如mapvector等。通常,人们使用size()函数。

用法与length(),i < s.size()

相同

答案 1 :(得分:1)

看起来std :: string的实现省略了函数length();顺便说一下,它不会返回int,所以你应该得到一张警告票。将来,请发布一个完整的程序,包括main()。

解决旧方法;

#include <string>

void convert(std::string& s) { //Creating a function that makes a variable lower case
    const size_t sz = s.size();

    for (size_t i = 0; i<sz; ++i) {
        s[i] = tolower(s[i]); //tolower lets me change to lower case
    }
}

int main() {
    std::string s("AbCdEf");
    convert(s);
    return 0;
}

Newfangled way ...

#include <string>

void convert(std::string& s) { //Creating a function that makes a variable lower case
    for (char &ch : s) {
        ch = tolower(ch); //tolower lets me change to lower case
    }
}

int main() {
    std::string s("AbCdEf");
    convert(s);
    return 0;
}

甚至是新手......

#include <algorithm>

void convert(std::string& s) { //Creating a function that makes a variable lower case
       std::transform(std::begin(s), std::end(s), std::begin(s), ::tolower);
}