我分析字符串的代码是以整数打印错误的位置数。 结果最初偏离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()
没有打印正确数量的职位。
答案 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()
个位置。
希望这有帮助!