Ошибка в программе, чтобы узнать количество повторений буквы в слове

Упражнение, в котором меня просят создать переменную типа string с именем text, символьную переменную с именем lletra и целочисленную переменную с именем Quantitat.

Затем, захватите строку из входного канала и сохраните ее в текстовой переменной, а также захватите символ и сохраните его в переменной lletra.

Затем, используйте функцию countAppearances, чтобы сохранить переменную количественного определения, сколько раз буква появляется в тексте. После получения на экран выводится сообщение «Письмо» + «Илетра +», появляется «+ количество +», «раз в тексте» + текст.

Это дает мне ошибку, особенно в переменной num, и я не знаю, решил ли я упражнение с помощью for и хорошо ли объявлена ​​функция.

#include <iostream>
#include <string>

using namespace std;

int countApperances(string s, char c);

int countApperances(string s, char c)
{
  for(int i; i < s.length(); s += 1){
    int num = 0;
    if(s[i] == c){
      num += 1;
    }
    i+= 1;
  }
  return num;
}

int main(){
  string text;
  char lletra;
  int quantitat;
  cin >> text >> lletra;
  quantitat = countApperances(text, lletra);
  cout << "Letter " << lletra << " appears " << quantitat << " times in the next " << text; 
  return 0;
}
1
задан 29.11.2019, 09:36
2 ответа

Чтобы считать количество элементов E в контейнере C, ты можешь использовать ее funciГіn std::count из заголовка <algorithm>:

// Cuenta la cantidad de E dentro de C
auto cantidad_e = std::count(C.begin(), C.end(), E);

AsГ - что ты cГіdigo podrГ, - чтобы быть похожим в:

int main() {
    std::string text;
    char lletra;
    std::getline(std::cin, text);
    std::cin >> lletra;

    int quantitat = std::count(text.begin(), text.end(), lletra);
    std::cout << "Letter '" << lletra
        << "' appears " << quantitat
        << " times in the text \"" << text << "\"\n";

    return 0;
}

ты Можешь видеть это функционируя в онлайн Try it! .

, Если то, что ты хочешь, состоит в том, чтобы осуществлять ее funciГіn countApperances, у тебя есть очень тяжелые ошибки в тебе implementaciГіn:

int countApperances(string s, char c)
{
  for(int i; i < s.length(); s += 1){
    int num = 0;
    if(s[i] == c){
      num += 1;
    }
    i+= 1;
  }
  return num;
}

Переменная num sГіlo существует внутри цикла for (переменная, которая появлялась бы между ключами { и } sГіlo, существует внутри этих ключей):

int countApperances(string s, char c)
{
  for(int i; i < s.length(); s += 1){
    int num = 0;  // <--- 'num' empieza a existir aquí
    if(s[i] == c){
      num += 1;
    }
    i+= 1;
  } // <--- 'num' deja de existir aquí.
  return num; // <--- ¿Qué es 'num'? ¡eso no existe!
}

советовал Тебе следующее:

  1. Получает цепь как постоянная ссылка:
    1. EvitarГЎs ненужная копия.
    2. Ввиду того, что ты не будешь изменять цепь, это должна быть постоянная величина.
  2. Верьте в счетчик вне цикла.
  3. Использует цикл for из ранга.

Продолжая эти советы, ты funciГіn countApperances podrГ, - чтобы быть похожим в:

int countApperances(const std::string &s, char c)
{
    int num = 0;
    for (auto letra : s) {
        num += (letra == c);
    }
    return num;
}

for ранга состоит mГЎs коротко и fГЎcil в том, чтобы писать / читать, опись букв использует прием C ++: одна comparaciГіn booleana (как подтверждение, равны ли два данных) дает как результат true или false, стоимость booleano может быть обращенной implГ-citamente в целое число, это 0 стоимость false и 1 стоимость true asГ - что она expresiГіn:

num += (letra == c);

SumarГЎ 1, когда letra будет c и sumarГЎ 0 в противоположном случае. Ты можешь видеть cГіdigo функционируя в онлайн Try it! .

1
ответ дан 01.12.2019, 10:39

несколько вещей. Ты не инициализировал i внутри for. помести ему int i = 0; Потом твой изменчивый номер она объявлена внутри for поэтому, когда ты возвращаешь ее, ты не можешь. Достань твой изменчивый номер перед for и там, если оно функционирует. Кроме того ты увеличиваешь string в. Это вызовет, что я остался в loop. Из-за которого ты это увеличиваешь в каждый перемещенная. Ты должен меняться - s + = 1 из-за i ++. Твой аккуратный код остался бы таким:

#include <iostream>
#include <string>
using namespace std;
int countApperances(string s, char c);
int countApperances(string s, char c) {
    int apariciones = 0;
    for (int i=0; i < s.length(); i ++) {
        if (s[i] == c)
            apariciones++;
    }
    return apariciones;
}
int main() {
    string text;
    char lletra;
    int quantitat;
    cin >> text >> lletra;
    quantitat = countApperances(text, lletra);
    cout << "Letter " << lletra << " appears " << quantitat << " times in the text " << text;
    return 0;
}

Надеялся, что он подал тебя.

типов Привета объятие.

2
ответ дан 01.12.2019, 10:39