如何计算特定字符前面的字符数
How to count number of characters before a specific character?
我在业余时间玩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;
}
}
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 字符数组前面的加号是什么意思?
- 如何计算特定字符前面的字符数
- put_time具有转换说明符,该转换指定符,该指定符在一个月的单个数字上输出没有前面字符的单位天数
- 如何在不删除任何字符的情况下将字符从字符串中的某个位置移动到其最前面
- 如何构造一个前面没有特定字符的正则表达式
- C++将带有十六进制字符的.txt转换为前面带有x的带有六进制字符的txt
- 如何在符号前面的映射值中显示与字符一样多的空格