最后,下面是有效的代码:

#include <iostream>
#include <iomanip>
#include <string>
#include <algorithm>
#include <Windows.h>

using namespace std;

bool checkBuffer( char buffArray[], int buffSize );
void parseBuffer( char alphaArray[], char buffArray[], int alphaSize, int buffSize );

int main()
{
   char alphabetArray[]= "abcdefghijklmnopqrstuvwxyz";
   char buffer[11];

   cout << "Enter the string up to 10 letters." << endl;
   cin.get(buffer, strlen(buffer) );

   checkBuffer(buffer, sizeof(buffer) );
   parseBuffer( alphabetArray, buffer, sizeof(alphabetArray), sizeof(buffer) );

   system("Pause");
   return 0;
}
bool checkBuffer( char buffArray[], int buffSize )
  {
    if(buffArray, strlen(buffArray) == 0)
      {
        cout << "The buffer is empty.  The program will end in 3 seconds. "  << endl;
        Sleep(3000);
        exit(1);
      }
}
void parseBuffer( char alphaArray[], char buffArray[], int sizeOne, int sizeTwo )
{
   int countFreq = 0;
   for(int i = 0; i < strlen(alphaArray); i++ )
    {
       countFreq = 0;

   for(int j = 0; j < strlen(buffArray); j++)
     {
         if( alphaArray[i] == buffArray[j] )
         countFreq = countFreq + 1;
     }
         cout << "The letter " << alphaArray[i] << "  matched " << countFreq
         << "    times." << endl;
     }
}

我正在研究一个练习教科书问题,该问题要求用户输入10个输入数组的字符,然后将该数组与硬编码的字母数组进行比较。输出应显示每个字母的重复数(如果有)。例如:
“有2个。”
“有0 b。”
“有3 c。” .....等等。

我的代码正确计算了两个数组之间重复(或不重复)的数量。但是,问题是每次循环迭代时都会显示计数。我只需要显示总计数即可。
我尝试将“cout”语句移到循环下方,因为它需要[i]和[j]从循环遍历数组的位置,因此该循环无效。
请指出我的错误所在,在此先感谢!
#include <iostream>   // using DevCPP editor
#include <iomanip>
#include <string>
#include <algorithm>
#include <Windows.h>

using namespace std;

void parseBuffer( char buffArray[], char alphaArray[], int sizeOne, int sizeTwo );

int main()
{
 // precode alphabet into an array with null terminating character
char alphabetArray[]={'a','b','c','d','e','f','g','h','i','j','k','l','m',n',
'o','p','q','r','s','t','u','v','w','x','y','z','\0'};

char buffer[11];
cout << "Enter the string up to 10 letters." << endl;
cin.get(buffer, 11);
parseBuffer(buffer, alphabetArray, 11, 11);

system("Pause");
return 0;

}
void parseBuffer(char buffArray[], char alphaArray[], int sizeOne, int sizeTwo)
{
 int countFreq = 0;
 cout << "This is buffer array: " << buffArray << endl;
 cout << "This is alphabet array: " << alphaArray << endl<< endl;

 for(int i = 0; i < (sizeTwo - 1); i++)
 {
  alphaArray[i];

 for(int j = 0; j < (sizeOne -1); j++)
 {
   buffArray[j];

 if(alphaArray[i] == buffArray[j] )
 {
  countFreq = countFreq + 1;
 }
 else
  {
   countFreq = 0;
  }
cout << "It's a match.  " << alphaArray[i] << "   shows up   " << countFreq << "  times." << endl << endl;
  }
 }
}  // end "parseBuffer"

最佳答案

您的代码有几个主要问题。

  • 循环顺序不正确。如果要为countFreq中的每个字符重用alphaArray,则需要切换内部循环和外部循环。
  • 您必须为每个countFreq = 0字符初始化alphaArray
  • 您必须为countFreq INSTEAD中的每个匹配字符增加++countFreq,即countFreq++countFreq += 1buffArray,以通过countFreq = 1分配1。您现在正在做的是在存在匹配项时重置countFreq = 1
  • 您减少了1个循环,即您最多检查10个字符而不是11个字符,并且alphaArray似乎使用了错误的大小限制。

  • 请格式化您的代码并正确使用for循环。即for(int j = 0; j < sizeOne; ++j)

    关于c++ - C++比较两个数组并显示重复项-代码现在可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8997820/

    10-09 23:10