Это моя домашняя работа, наш профессор хочет, чтобы мы сначала использовали cin, чтобы получить строку, и вывести число «a» и «c» в этой строке.
Моя идея состоит в том, чтобы сначала удалить все остальные буквы, например, если у вас есть строчка str = «apple», и вы хотите «p» s, вы удаляете другие буквы и получаете новое строковое значение str1 = «pp», чем использовать str.size (), чтобы получить, сколько «p».
Моя проблема в том, как я могу удалить другие письма.
Если вы считаете только одну конкретную букву, есть стандартный библиотечный алгоритм.
int p_count = std::count(str.begin(), str.end(), 'p');
Существует связанный алгоритм, который принимает предикат для более сложных применений:
int ac_count = std::count_if(str.begin(), str.end(), [](char ch){ return ch == 'a' || ch == 'c'; });
И еще одно решение — простой массив. Это быстро и считается все письма в один проход.
int counts[256] = {};
for (unsigned char ch : str) {
++counts[ch];
}
cout << "a count is " << counts['a'] << '\n';
cout << "c count is " << counts['c'] << '\n';
Если вам разрешено использовать std::map
, ты можешь использовать:
std:map<char, int> charCount;
for (auto c : str )
{
charCount[c]++;
}
// Number of times 'a' is found:
int aCount = charCount['a'];
// Number of times 'c' is found:
int cCount = charCount['c'];
Зачем вообще удалять персонажей? Вы можете достичь своей цели следующим образом:
std::string str;
std::cin >> str;
int a_counter = 0;
for(char& c : str)
{
if (c == 'a')
a_counter++;
}
std:: cout << a_counter;
Стандартная библиотека C ++ имеет функцию для этого: подсчитывать:
int a_count = std::count(str.begin(), str.end(), 'a');
Большинство других ответов великолепны, и я настоятельно призываю вас использовать Решение Blastfurnace; однако, если вы действительно хотите стереть std::string
за исключением определенного набора символов (скажем, «а» и «с») вы можете использовать стереть-удалить идиому:
std::string s;
std::cin >> s;
s.erase(std::remove_if(s.begin(), s.end(), [](char c){ return c != 'a' || c != 'c'; }), s.end());
cout << s.size() << endl;
Там есть ответ здесь это объясняет дальше (отказ от ответственности: это мой ответ)
Вы можете использовать следующий мыслительный процесс для решения подобных проблем в будущем.
Программирование можно упростить, выполнив 3 шага:
1) входные данные
2) обрабатывать данные
3) выходные данные
шаги:
1) Понять, что вы пытаетесь решить на вашем входе.
вы поняли, что вы должны читать входные данные, используя «cin», и сохранять их, используя строковую переменную, а затем считать количество раз, когда символ появляется в этой строке.
2) Узнайте больше о типе / классе переменной, который вы используете для хранения ваших данных.
В вашем случае вы храните свой ввод в «строке», которая имеет класс / тип строки. Перейдите на справочный веб-сайт C ++, чтобы прочитать о строковом классе и ознакомиться со всеми функциями и атрибутами, которые предоставляет строковый класс. Смотрите следующее ссылка на сайт: Там вы увидите, что у этого строкового класса есть оператор «[]», который возвращает символ. Вы можете нажать на эту ссылку и увидеть пример того, как ее использовать.
Затем используйте только что полученную информацию для обработки ваших данных.
3) Теперь реализуйте свою логику для обработки данных.
В вашем случае вы можете запустить цикл for:
std::string str;
std::cin << std::str;
int counter = 0;
for(int i=0; i< str.size();i++)
{
if( str[i] == 'p' ) counter++;
}
Блок if проверяет каждый символ в строке и сопоставляет его с символом ‘p’. Если это совпадает, переменная счетчика увеличивается на 1. В конце значение «counter» — это количество раз, когда «p» появилось в строке «str»
for(int i=0;i<str.size();i++)
{
if(str[i]=='a')
countOfa++;
else if(str[i]=='c')
countOfc++;
}
cout<<"coun of A is :"<<countOfa<<endl;
cout<<"coun of C is :"<<countOfc<<endl;return 0;
}