如何计算特定字符前面的字符数

  • 本文关键字:字符 前面 何计算 计算 c++
  • 更新时间 :
  • 英文 :


我在业余时间玩C++,我似乎一辈子都不知道如何计算字符串中特定字符之前的字符数。

例如:

Hello My Name t is Bob!

我想让它计算t之前的字符数(包括空格(。

这是我的尝试:

std::string test = "Hello My Name t is Bob!"
std::string::size_type pos = line.find("t");
int numOfCharacters = 0;
while (pos == std::string::npos) {
numOfCharacters++;
pos = pos + 1;
}

我对.find()的理解是,如果检索到npos,那意味着你没有找到你要查找的文本,所以我认为它会一直运行,直到我找到t,所以它会退出while循环。

您对find()的理解是正确的,但对npos的使用是错误的。

如果找到子字符串,则不进入循环,并且numOfCharacters保持为0。

如果没有找到子字符串,则循环时不考虑字符串的内容,直到pos最终递增到它变成npos(-1(的点,而numOfCharacters最终将得到一个不太正确的值。

也许你在想更像这样的事情?

std::string test = "Hello My Name t is Bob!"
std::string::size_type pos = line.find("t");
std::string::size_type i = 0;
int numOfCharacters = 0;
while (i < pos)
{
numOfCharacters++;
i = i + 1;
}

不过,这是多余的。字符串是0索引的,所以给定字符的索引是,也是前面的字符数。如果使用find():,实际上根本不需要循环

std::string test = "Hello My Name t is Bob!"
std::string::size_type pos = test.find("t");
int numOfCharacters = static_cast<int>(pos);

如果你要手动循环,那么根本不要使用find()

std::string test = "Hello My Name t is Bob!"
int numOfCharacters = -1;
for(std::string::size_type pos = 0; pos < test.size(); ++pos)
{
if (test[pos] == 't')
{
numOfCharacters = static_cast<int>(pos);
break;
}
}

最新更新