Это l oop
for (int i=0; i < strlen(str); i++) {
if (islower(str[i])) {
continue;
} else {
containsUpper = 1;
upperLetters[i] = str[i]; // is this the bad line?
}
}
1) неверно и 2) страдает от плохого стиля программирования.
Вы должны добавлять буквы верхнего регистра к массиву символов upperLetters
последовательно, что вы не делаете. Также, если символ не является символом нижнего регистра, это не означает, что символ является символом верхнего регистра. Например, в общем случае это может быть ди git или пунктуация.
Также нет необходимости вызывать функцию strlen
. Аргумент вызова функции должен быть приведен к unsigned char. В противном случае может случиться так, что вызов функции вызовет неопределенное поведение.
Часть l oop с оператором continue избыточна.
l oop может искать Например, следующий способ
for ( size_t i = 0, j = 0; str[i] != '\0'; i++ )
{
if ( isupper( ( unsigned char )str[i] ) )
{
upperLetters[j++] = str[i];
}
}
containsUpper = upperLetters[0] != '\0';
Если вам нужно количество заглавных букв в другой части программы, то l oop может выглядеть как
size_t n = 0;
for ( size_t i = 0; str[i] != '\0'; i++ )
{
if ( isupper( ( unsigned char )str[i] ) )
{
upperLetters[n++] = str[i];
}
}
if ( n )
{
printf( "Contains Uppercase!\n" );
printf( "Uppercase Letters: " );
printf("%zu\n", n );
for ( size_t i = 0; i < n; i++ )
{
printf( "%c", upperLetters[i] );
}
//…
или вместо l oop
for ( size_t i = 0; i < n; i++ )
{
printf( "%c", upperLetters[i] );
}
вы могли бы просто написать
printf( "%s\n", upperLetters );
, потому что массив был инициализирован нулем и поэтому содержит строку.
Как сообщил компилятор функция get небезопасна и не поддерживается стандартом C. Вместо этого используйте функцию fgets
.
Например
fgets( str, sizeof( str ), stdin );