3

我分析字符串的代码以整数形式打印不正确的位置数。结果最初相差 1 个整数,当我在字符串中插入一个字符时,即使我只添加了一个字符,结果也会改变 2 个位置值。这是代码:

#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()没有打印正确数量的职位。

4

3 回答 3

6

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

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

输出:

4

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

Hkkey, what's up?
于 2013-10-14T02:00:09.560 回答
3

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

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

于 2013-10-14T02:01:40.107 回答
2

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

希望这可以帮助!

于 2013-10-14T02:00:11.287 回答