В с ++ как получить букву из строки

Это моя домашняя работа, наш профессор хочет, чтобы мы сначала использовали cin, чтобы получить строку, и вывести число «a» и «c» в этой строке.

Моя идея состоит в том, чтобы сначала удалить все остальные буквы, например, если у вас есть строчка str = «apple», и вы хотите «p» s, вы удаляете другие буквы и получаете новое строковое значение str1 = «pp», чем использовать str.size (), чтобы получить, сколько «p».

Моя проблема в том, как я могу удалить другие письма.

0

Решение

Если вы считаете только одну конкретную букву, есть стандартный библиотечный алгоритм.

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';
4

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

Если вам разрешено использовать 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'];
2

Зачем вообще удалять персонажей? Вы можете достичь своей цели следующим образом:

std::string str;
std::cin >> str;
int a_counter = 0;
for(char& c : str)
{
if (c == 'a')
a_counter++;
}

std:: cout << a_counter;
1

Стандартная библиотека C ++ имеет функцию для этого: подсчитывать:

int a_count = std::count(str.begin(), str.end(), 'a');
1

Большинство других ответов великолепны, и я настоятельно призываю вас использовать Решение 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;

Там есть ответ здесь это объясняет дальше (отказ от ответственности: это мой ответ)

0

Вы можете использовать следующий мыслительный процесс для решения подобных проблем в будущем.

Программирование можно упростить, выполнив 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»

0
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;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector