Я начинаю C++ и написал программу, чтобы проверить, являются ли две фразы анаграммами. Символы читаются по одному и сохраняются в массиве. У меня все работает, кроме как в некоторых случаях добавляются дополнительные символы в массив.Дополнительные символы, вставленные в массив
Например, если я введу фразы AABB и Авва, это выход из программы:
Введите две строки, которые могут быть анаграммы:
-> ААББ
-> авва
Строка A is aabb
String B is abbai?
Две строки не являются анаграммами.
Они должны быть анаграммами, но по какой-то причине, я? добавляется в массив, заставляя фразы не быть анаграммами. Я, вероятно, не замечаю простую ошибку в коде, но буду очень признателен за любую обратную связь.
Вот код:
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int check_anagram(char [], char []);
int main()
{
char ch, a[60], b[60];
int flag, i;
cout << "Enter two lines that might be anagrams:" << endl;
cout << "--> ";
cin.get(ch);
ch = tolower(ch);
i = 0;
while (ch != '\n')
{
if (ch > '@') {
a[i] = ch;
i++;
}
cin.get(ch);
ch = tolower(ch);
}
cout << "--> ";
cin.get(ch);
ch = tolower(ch);
i = 0;
while (ch != '\n')
{
if (ch > '@') {
b[i] = ch;
i++;
}
cin.get(ch);
ch = tolower(ch);
}
flag = check_anagram(a, b);
cout << "String A is " << a << endl;
cout << "String B is " << b << endl;
cout << "The two strings ";
if (flag == 1)
cout << "ARE";
else
cout << "are NOT";
cout << " anagrams." << endl << endl;
return 0;
}
int check_anagram(char a[], char b[])
{
int first[26] = {0}, second[26] = {0}, c = 0;
while (a[c] != '\0')
{
first[a[c]-'a']++;
c++;
}
c = 0;
while (b[c] != '\0')
{
second[b[c]-'a']++;
c++;
}
for (c = 0; c < 26; c++)
{
if (first[c] != second[c])
return 0;
}
return 1;
}
Заранее спасибо!
Я знал, что это было что-то просто. Спасибо огромное! – Mitchell
@ Митчелл, добро пожаловать;) –