Найти количество слов,которые имеют три подряд буквы А "AAA"
Дано предложение, слова в каком разделе пробелами (одним или несколькими). Определить количество слов, содержащих "ААА".Решить с помощью символьного массива не используя строки.
Вот мой код,но он работает не совсем так как надо,может у кого нибудь будет код попроще? Буду очень благодарен.
#include <iostream>
#include <cstring>
#include <algorithm>
int n = 255, m = 500;
bool FirstPStr(char* strRez, char* str)
{
if (strlen(strRez) > strlen(str))
{
return NULL;
}
for (int i = 0; i <= strlen(str) - strlen(strRez); i++)
{
char *newStr = new char[n];
for (int j = 0; j < strlen(strRez); j++)
{
newStr[j] = str[i + j];
}
if (strcmp(newStr, strRez) == 0)
{
return true;
}
delete[] newStr;
}
return false;
}
int foo(char* searchStr, char* str)
{
int count = 0;
bool noEmpty = false;
char temp[n];
for(int i = 0, j = 0; j < n && i < m; j++, i++)
{
if(str[i] == '\0' && noEmpty)
{
if(FirstPStr(searchStr, temp))
{
count++;
}
return count;
}
else if(str[i] == ' ' && noEmpty)
{
if(FirstPStr(searchStr, temp))
{
count++;
}
std::fill(temp, temp+255, '\0');
j = -1;
noEmpty = false;
}
else if(str[i] == '\0')
{
return count;
}
else
{
temp[j] = str[i];
noEmpty = true;
}
}
return 0;
}
int main()
{
char str[]{"He FAAAl AAA KAAAK KaaAK A BAAAllll "};
char searchStr[]{"AAA"};
std::cout << foo(searchStr, str);
return 0;
}
Ответы (2 шт):
Автор решения: EOF
→ Ссылка
В стандартной библиотеке есть две функции, которые сократят Ваш код в разы. Это функции strtok и strstr. Вот решение Вашей задачи с их использованием:
#include <iostream>
#include <cstring>
int main()
{
char input[] = "He FAAAl AAA KAAAK KaaAK A BAAAllll ";
// Счётчик слов
unsigned int counter = 0U;
// Находим первое слово в строке
char *token = strtok(input, " ");
// Пока слова в строке есть
while(token)
{
// Ищем подстроку AAA в текущем слове. Если нашли,
// то выводим его и инкрементируем счётчик
if (strstr(token, "AAA"))
{
std::cout << token << std::endl;
counter++;
}
// Ищем следующее слово
token = strtok(NULL, " ");
}
// Вывод на экран количество найденых слов
std::cout << "Found " << counter << " words\n";
return 0;
}
Автор решения: Arty
→ Ссылка
Можно вообще по-хардкорному в виде короткого кода, без использования каких либо функций или классов или хедеров, за исключением <iostream> + std::cout для вывода в консоль:
#include <iostream>
int main() {
char str[]{"He FAAAl AAA KAAAK KaaAK A BAAAllll "};
int cnt = 0;
bool counted = false;
for (int i = 0; i <= int(sizeof(str)) - 4; ++i)
if (str[i] == ' ')
counted = false;
else if (!counted && str[i] == 'A' &&
str[i + 1] == 'A' && str[i + 2] == 'A') {
counted = true;
++cnt;
}
std::cout << cnt;
}
Вывод:
4