#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:
Давайте сначала рассмотрим контракт
- программа на C для чтения символов один за другим из стандартного ввода,
- преобразование всех символов верхнего регистра в нижний регистр и всех символов нижнего регистра в верхний регистр,
- запишите результат в стандартный вывод.
- … посчитайте, сколько символов .. читать,
- … сколько из них было преобразовано в каждом направлении,
- выведите итоговые значения в конце.
Предположим, что входные символы могут быть любыми 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. Черт, должно быть, сегодня тяжелая публика
:)