最后,下面是有效的代码:
#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 += 1
或buffArray
,以通过countFreq = 1
分配1。您现在正在做的是在存在匹配项时重置countFreq = 1
。 alphaArray
似乎使用了错误的大小限制。 请格式化您的代码并正确使用for循环。即
for(int j = 0; j < sizeOne; ++j)
。关于c++ - C++比较两个数组并显示重复项-代码现在可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8997820/