Преобразовать все строчные символы в верхний регистр и наоборот

#c #string

#c #строка

Вопрос:

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

например, Радха Кришна! станет

Радха Кришна!

Всего прочитано 15 символов, 10 преобразовано в верхний регистр, 2 в нижний регистр

Вот мой код :-

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

int main()
{
    char sentence[100];
    int count, ch, i;

    printf("Enter a sentence n");
    for (i = 0; (sentence[i] = getchar()) != 'n'; i  )
    {
        ;
    }
    sentence[i] = '';
    /*  shows the number of chars accepted in a sentence */
    count = i;
    for (i = 0; i < count; i  )
    {
        ch = islower(sentence[i])? toupper(sentence[i]) :
tolower(sentence[i]);
        putchar(ch);
    }
}
 

Он преобразуется из верхнего в нижний регистр и наоборот, но я не могу понять, как считать.

Комментарии:

1. Добавьте два счетчика, установите значение 0, измените тройную операцию if на блок if / else и увеличьте один или другой счетчик. в зависимости от условия «если»,

2.« for (i = 0; i < count; i ) » ???

3. Вы написали этот показанный код?

4. Что произойдет, если пользователь введет больше 100 символов? Вам нужно убедиться, что вы не пишете за пределами sentence . (возможно, добавить i < 100 amp;amp; ... )

Ответ №1:

Измените троичный код на предложение if / else и укажите счетчики для каждого условия.

 int changedToLower = 0;
int changedToUpper = 0;
for (i = 0; i < count; i  ) {
    char oldC = sentence[i];
    if(islower(sentence[i])) {
       ch = toupper(sentence[i])
       changeToUpper  = (ch != oldC)? 1 : 0;
    } else {
       ch = tolower(sentence[i]);
       changeToLower  = (ch != oldC)? 1 : 0;
    }
}
 

Комментарии:

1. 1) Это будет учитываться, например, ‘!’ и пробел, измененный на пониженный. Существует три варианта: нижний, верхний или ни один. 2) islower() ( isupper() ) возврат true не обязательно означает, что символ может быть изменен с toupper() помощью ( tolower() ) ; языковой стандарт может содержать символы, которые имеют только нижний (верхний) регистр.

Ответ №2:

Давайте сначала рассмотрим контракт

  1. программа на C для чтения символов один за другим из стандартного ввода,
  2. преобразование всех символов верхнего регистра в нижний регистр и всех символов нижнего регистра в верхний регистр,
  3. запишите результат в стандартный вывод.
  4. … посчитайте, сколько символов .. читать,
  5. … сколько из них было преобразовано в каждом направлении,
  6. выведите итоговые значения в конце.

Предположим, что входные символы могут быть любыми char , а не только A-Za-z .

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

int main() {
    // No need to save previous letters
    // char sentence[100];
    unsigned long long character_count = 0; //#4
    unsigned long long toupper_count = 0;   //#5
    unsigned long long tolower_count = 0;   //#5

    printf("Enter a sentencen");

    // for (i = 0; (sentence[i] = getchar()) != 'n'; i  )
    int ch;
    while ((ch = getchar()) != EOF) {  // #1
      character_count  ;               // #4
      if (ch == 'n') break;           // #1

      if (isupper(ch)) {
        ch = tolower(ch);       // #2
        tolower_count  ;        // #5
      } else if (islower(ch)) { 
        ch = toupper(ch);       // #2
        toupper_count  ;        // #5
      }

      putchar(ch);              // #3
    }

    printf("n"                 // #6
        "Count: characters read   : %llun"
        "Count: converted to lower: %llun"
        "Count: converted to upper: %llun", 
        character_count, toupper_count, tolower_count);
}
 

Комментарии:

1. Черт, должно быть, сегодня тяжелая публика :)