Я хочу подсчитать символы верхнего регистра в строке. Почему мой код выдает неправильный результат? - PullRequest
0 голосов
/ 06 мая 2020

Я работаю над упражнением по программированию « Количество символов верблюжьего регистра », используя C ++. Цель упражнения - подсчитать количество заглавных букв в заданной строке (то, что в упражнении называется «верблюжий регистр»).

Итак, при следующих двух входных данных:

  • ckjkUUYII
  • HKJT

Я бы ожидал, что получит следующие значения соответственно:

  • 5
  • 4

Однако, исходя из приведенного ниже кода, я получаю:

  • 0
  • 5

Это явно неверно, но мне трудно локализовать проблему в моем коде. Как я могу решить эту проблему или отладить мою ошибку?

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    int t;cin>>t;
    while(t--)
    {
        int res=0;
        string str;
        getline(cin,str);
        int len= str.length();
        for(int i=0;i<len;i++)
        {
            int c=str[i];
            if(isupper(c))
            res=res+1;
        }
        cout<<res<<endl;
    }
    //return 0;
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Основная проблема заключается в том, что вы пытаетесь преобразовать символ в целое число в строке 15. Целое число не может быть ни в верхнем, ни в нижнем регистре. следовательно, он дает неправильный ответ. Просто проверьте isupper (s [i]), поскольку он даст правильный ответ.

Обратите внимание на мой код,

#include <bits/stdc++.h>

using namespace std ;
int main() {
    int t ; cin >> t ;
    while(t--) {
        string s ; cin >> s ;
        int cnt = 0 , ln = s.size() ;
        for(int i = 0 ; i < ln ; i ++) {
            if(isupper(s[i])) cnt ++ ;
        }
        cout << cnt << endl ;
    }

    return 0;
}


0 голосов
/ 06 мая 2020

После ввода целого числа как t, во входном буфере остается символ новой строки. Итак, первый вызов getline дает в результате пустую строку. Вам нужно сделать:

int t;
cin >> t;
cin.ignore();
while (t--) {
  ...
}

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

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