2016-10-16 3 views
-2

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

eg - Radha Krishna! будет

rADHA kRISHNA!

Read 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] = '\0'; 
    /* 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); 
    } 
} 

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

+2

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

+0

«*' for (i = 0; i alk

+1

Вы написали этот код? – alk

ответ

0

Измените тройку на предложение 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()'); языковой стандарт может содержать символы, имеющие только нижний (верхний) регистр. – potrzebie

+0

@potrzebie спасибо. Как насчет сейчас? –

0

Давайте рассмотрим контракт первый

  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 sentence\n"); 

    // 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 : %llu\n" 
     "Count: converted to lower: %llu\n" 
     "Count: converted to upper: %llu\n", 
     character_count, toupper_count, tolower_count); 
} 
+1

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

Смежные вопросы