如何使用 C++ 中的函数计算字符串中出现的字符类型?

How to Count a Type of Character that Appears in a String Using a Function in C++?

我的作业目标是编写一个 C++ 程序,它接受两个变量,一个字符值和一个字符串值。然后,该程序使用名为 int CountCharacters() 的用户定义函数来计算用户输入的字符值在用户输入中出现的次数字符串值。

到目前为止,我已经能够编写我认为至少是一个良好基础的代码,但是当我 运行 它时,我得到了一个疯狂的大数字,每次我 运行程序。

下面是我目前写的程序:

测试输入:n 星期一

预期输出:1

收到的输出:22091

#include <iostream>
using namespace std;

int CountCharacters(char userChar, string userString)  {
   
   int casesFound = 0;
   int n = userString.length();
   
   for (int i = 1; i < n; i++)  {
      if (userString[i] == userChar)  {
         casesFound = casesFound + 1;
      }
   }
   
   return casesFound;
}

int main() {
   
   char cVal;
   string sVal;
   int casesFound;
   
   cin >> cVal;
   getline(cin, sVal);
   
   CountCharacters(cVal, sVal);
   
   cout << casesFound << endl;

   return 0;
}

你得到不同数字的原因是你输出 casesFound 没有给它赋值。读取未初始化的变量会使您的程序具有 undefined behavior - 因此 任何事情 都可能发生。如果您的函数返回 1,那也没有关系,因为您没有将该值分配给 casesFound。您可以将返回的函数值分配给 casesfound,如下所示:

casesFound = CountCharacters(cVal,sVal);

然后继续

cout<<casesFound;

或者您可以直接打印返回值而不将其分配给变量:

std::cout << CountCharacters(cVal, sVal) << '\n';

另请注意,您的循环中存在错误。数组和字符串等中的第一个索引在 C++ 中是 0,而不是 1,因此您无法计算 Monday.[=22 中的 M =]