Проблема сравнения одного символа с символом в строке с помощью цикла c ++ - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь выучить c ++, и одно из заданий - попросить пользователя написать письмо, затем попросить строку текста и посчитать, сколько раз первая строка повторяется в строке текста.

Я написал некоторый код, который успешно доходит до момента запроса буквы и строки текста - я могу отобразить оба

Я могу пройти строку текста, считая, сколько букв в строке. Когда я пытаюсь добавить проверку if, чтобы сравнить текущую букву в строке внутри цикла с первой запросной буквой - я получаю эту ошибку компиляции:

error: ISO C++ forbids comparison between pointer and integer [-fpermissive] 
if (textToCount[i] == letterToCount)

это полный код, который я написал

char getLetterToCount(char letterToCount[]);
char getTextToCount(char textToCount[]);
int countLetters(char letterToCount[], char textToCount[]);

int main()
{
   char letterToCount[1];
   getLetterToCount(letterToCount);
   char textToCount[256];
   cin.ignore();
   getTextToCount(textToCount);
   countLetters(letterToCount, textToCount);
   return 0;
}

char getLetterToCount(char letterToCount[])
{
   cout <<  "Enter a letter: ";
   cin >>  letterToCount;
}

char getTextToCount(char textToCount[])
{
   cout <<  "Enter text: ";
   cin.getline(textToCount, 256);
}

int countLetters(char letterToCount[], char textToCount[])
{
   int numChrsInString = 0;
   int numTimesChrtoCountrepeated = 0;
   for (int i = 0; textToCount[i] != '\0'; i++)
   {
      if (textToCount[i] == letterToCount)
      {
         numTimesChrtoCountrepeated++;
      }
   }
   cout << "num chrs in string: "
        << numChrsInString
        << "num times chr counted: "
        << numTimesChrtoCountrepeated
        << endl;
}

Я сделал немало выводов, чтобы попытаться выяснить, что с ними не так - я вытащил код для этого, потому что это немного запутало его.

НО ошибка компиляции объясняет, что не так, я просто не понимаю, почему это неправильно, потому что то, что я пытаюсь сравнить, это ОБА текстовые буквы ...

Было бы замечательно, если бы кто-то, кто знает c ++, мог объяснить, что я делаю неправильно

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

В C ++ массивы являются указателями. C ++ считает lettertocount указателем, потому что вы передаете его как массив. Вы не хотите проходить это; Вы хотите передать только символ:

int countLetters(char letterToCount, char textToCount[])

Более важный вопрос, на мой взгляд, почему вы думаете, что должны передавать lettertocount в виде массива? Видимо, это всего лишь одно письмо. Когда вы вызываете эту функцию, хотите ли вы пересчитать несколько букв?

0 голосов
/ 11 ноября 2018

Вы сравниваете char с указателем на char Использование:

if (textToCount[i] == letterToCount[0])
                                   ~~~

Примечание: очевидных придирок мало, но выше приведена основная причина ошибки компилятора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...