Дополнительные символы вставлены в массив

Я новичок в C ++ и написал программу, чтобы проверить, являются ли две фразы анаграммами. Символы читаются по одному и сохраняются в массиве. У меня все работает, за исключением некоторых случаев, дополнительные символы вставляются в массив.

Например, если я ввожу фразы aabb и abba, это вывод программы:

Введите две строки, которые могут быть анаграммами:
—> аабб
—> abba
Строка А — ААББ
Строка B — это 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;
}

Заранее спасибо!

0

Решение

Вам просто нужно завершить два символьных массива '\0' потому что логика в check_anagram обрабатывает оба массива как завершенные NULL.

   ..
while (ch != '\n')
{
if (ch > '@') {
a[i] = ch;
i++;
}
cin.get(ch);
ch = tolower(ch);
}

a[i] = '\0';     // <<<<<<<< Add this line
cout << "--> ";

cin.get(ch);
ch = tolower(ch);

i = 0;
while (ch != '\n')
{
if (ch > '@') {
b[i] = ch;
i++;
}
cin.get(ch);
ch = tolower(ch);
}

b[i] = '\0';     // <<<<<<<< Add this line
..

Вот результат:

Enter two lines that might be anagrams:
--> aabb
--> abba
String A is aabb
String B is abba
The two strings ARE anagrams.
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector