В C преобразуйте указанную c букву в массив в заглавную - PullRequest
0 голосов
/ 14 января 2020
int NameAbbreviation() {
  if (name_last[1] <= 'a' && name_last[1] >= 'b') {
    return name_last[1] += 'A' - 'a';
  }
  printf("%c%c%c", name_first[0], name_last[0], name_last[1]);
}

Здравствуйте, сообщество, мои предыдущие вопросы не получили хороших отзывов, надеюсь, этот вопрос вас не беспокоит так же, как мой последний вопрос.

В этом небольшом примере кода я пытаюсь использовать заглавную букву второй буквы массива char, чтобы впоследствии сохранить ее в собственной переменной name_abbreviation. Поскольку код не превращает букву в заглавную, мне интересно, как я могу получить доступ к буквам, указанным c в массивах, чтобы изменить содержимое и сохранить его.

Я не получаю никаких ошибок, но код не ' выполнить оператор if. Name_last [i] является входным значением.

Ответы [ 2 ]

0 голосов
/ 14 января 2020

https://godbolt.org/z/v2uTs2

#include <stdio.h>
#include <string.h>
#include <ctype.h>

char *toUpperX(char *str, size_t pos)
{
    if(str && pos < strlen(str))
    {
        str[pos] = toupper(str[pos]);
    }
    return str;
}

int main(int argc, char **argv)
{
    char str[] = "Asdgh 457678 /\\we";

    printf("Before: %s", str);
    printf("\tAfter: %s\n", toUpperX(str, 1));
}
0 голосов
/ 14 января 2020

В зависимости от используемой кодировки от «а» до «z» не обязательно должны быть в последовательности; но поскольку они установлены практически на всех современных машинах, ваше состояние, скорее всего, никогда не будет истинным. В любом случае вы не должны делать арифметику с символьными литералами. Попробуйте больше идиоматических c ...

#include <ctype.h>

... и ...

if ( isalpha( (unsigned char)name_last[1] ) )

... и ...

return toupper( (unsigned char)name_last[1] )

Также обратите внимание, что функция, объявленная для возврата int, должна возвращать int в всех случаях. У вас нет return /* something */ после вашего printf ...

...