C ++ .length()函数给出错误的结果

时间:2013-10-14 01:57:19

标签: c++ string

我分析字符串的代码是以整数打印错误的位置数。 结果最初偏离1个整数,当我向字符串插入一个char时,结果会改变2个位置值,即使我只添加了一个char。这是代码:

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int main(){
    string s1 = "Hey, what's up?";
    cout << s1.length() << endl; // should be 14 positions, not 15 if starting at 0
    cout << s1.insert(1, "k") << endl;
    s1 = s1.insert(1, "k");
     cout << s1.length() << endl; //should be 15, not 17
    system("pause");
    return 0;
}

请告诉我为什么.length()没有打印正确数量的职位。

3 个答案:

答案 0 :(得分:6)

.length()不返回字符串的结束位置,它返回字符串中的元素数。即。 “四”将是4,因为它有四个字母。

std::string four = "four";
std::cout << four.length() << std::endl;

输出:

4

第二部分的返回值是17而不是16的原因是因为你在std :: cout中插入了两次k,在代码后面插入了第二次。您的实际输出字符串将是:

Hkkey, what's up?

答案 1 :(得分:3)

string::length()返回字符串中的字符数,而不是最后一个字符的位置,因此15是正确的。

想一想:如果length()像你想的那样返回最后一个字符的位置,那么空字符串会返回什么?

答案 2 :(得分:2)

string::length返回字符数,与位置数相同。字符数是您在开始时开始计算的数量,并为每个字符增加一个计数器,因此它不应该出现在最后一个位置的索引处。有效索引的范围是[0, str.length() - 1],其中包括str.length()个位置。

希望这有帮助!