c++ - 如何查找字符串中的字符数
问题描述
我正在尝试编写一个需要两个输入的程序:第一个是字符,第二个是字符串。然后程序将搜索字符串,一次一个地方,并跟踪用户输入的字符在字符串中出现的次数。
我似乎找不到我的错误,但for
我的CountCharacters
函数中的循环似乎没有迭代。任何人都可以提供任何帮助吗?
#include <iostream>
#include <string>
using namespace std;
int CountCharacters(char userChar, string userString) {
int charCounter = 0;
int i;
for (i = 0; i > userString.length(); ++i) {
if (userString.at(i) == userChar) {
charCounter += 1;
}
}
return charCounter;
}
int main() {
char userChar;
string userString;
cin >> userChar;
getline(cin, userString);
cout << CountCharacters(userChar, userString);
return 0;
}
解决方案
正如@user4581301 指出的那样,for 循环中的条件没有意义。如果您设置 的值i = 0
然后检查是否i > userString.length()
,布尔表达式将始终评估为假,因为 0 永远不会大于输入单词的长度。如果您的循环条件在开始时本身评估为 false,它将永远不会开始循环。
for (i = 0; i < userString.length(); ++i)
在这里,i
仍然是0
,但布尔表达式检查是否i < userString.length()
。在初始迭代中,0 将小于输入单词的长度,因此布尔表达式的计算结果为 true,循环将运行。
推荐阅读
- google-cloud-platform - 访问/管理地图自动完成等 API 服务需要哪些 GCP IAM 权限?
- selenium - 发送每个键的速度较慢,因为文本框无法快速处理发送键
- c# - HangFire 在给定时间 3 次重复作业
- security - 如果 .EXE 文件以不同的格式保存为 .pdf 或 .csv,是否可以自行执行?
- c# - 将项目从 .Net 4.6.1 升级到 4.7.x 会导致 WCF Reference.cs 中出现错误
- c# - 面板尺寸在程序上和设计上不同
- java - 如何在几个间隔后删除 Firebase 的最后一个条目?
- spring-data-redis - 带有 redis 主/从配置的春季会议 - 最终一致性问题
- php - PHP:无效文件
- google-analytics - 仅在网站的一页上应用 Google 跟踪代码管理器