C++ СРОЧНО!!!! Написшите программу, которая считает весь заголовок(строку), и замените...

0 голосов
143 просмотров

C++
СРОЧНО!!!!
Написшите программу, которая считает весь заголовок(строку), и замените каждую первую букву в слове на заглавную, а все остальные буквы — на строчные.
Примеры:

входные данные :
1)A draw that feels like a win.
2)POLICE ARREST EVERYONE ON FEBRUARY 22.
3)TiTANiC SiNkS fOuR hOuRs after HITTING iCeBeRg.
выходные данные :
1)A Draw That Feels Like A Win
2)Police Arrest Everyone On February 22
3)Titanic Sinks Four Hours After Hitting Iceberg


Вот мой пример на одно слово:
#include
using namespace std;

int main() {
int const size = 80;
char str[size]={0};
cin.getline(str,size);

for(int i = 0; i < size; i++) {
if(islower(str[i])) {
str[i] = toupper(str[i]);
break;
}
}
cout<<str<<endl; <span>
}


Информатика (124 баллов) | 143 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Привет, смотри я вижу что с плюсами ты знаком крайне не долго, так что будем говнять - код будет понятный, но отвратительный. Первое, не допускай никогда вложености, это все лучше выносить в функции, 2 - учи 11 стандарт, он сейчас почти везде.
Прикрепил два примера:
simple - код написан в столб
middle - код слегка по лучше
Во втором варианте я все повыносил в функции, если ты с ними знаком,выберай его, это преоритетней.

Спасибо за отметку "лучший ответ" и нажатую кнопочку "спасибо"тут и в моем аккаунте.

(1.4k баллов)
0

2. Что до точки, то это тоже должно было бы быть указано в задании, у вас я вижу только в одном из примеров входных/выходных данных её наличие и отсутствие, так что не помешало бы сформулировать это как тезис в задании

0

Что до второго, то стоит просто добавить проверку после цикла в главной функции, код ниже:

0

if (s[s.size() - 1] == '.')
{
s.erase(s.size() - 1);
}

0

s - ваша строка

0

Но это удалит только 1 символ точки в конце строки, при его наличии

0

Ниже приведен код для удаления произволного кол-ва точек в конце строки:

0

//переменная размера строки
int stringSize = myString.size();
//переменная указывающая на последнюю букву в строке
int lastLater = 0;
//переменная хранящая значение
//была ли найдена последная буква в строке
bool bFindLastLater = false;

0

//цикл по всей строке с зада на перед
for (int i = stringSize - 1; i != 0; --i)
{
//если последняя буква не была ещё обнаружена
//и текущий символ является буквой
if (false == bFindLastLater && isalpha(myString[i]))
{
//присвоить текущий индекс последнему буквенному вхождению
lastLater = i;
//установить "флаг", что последняя буква найденна
bFindLastLater = true;
}
}

0

//при условию что последняя буква найденна и это не конец строки
if (true == bFindLastLater && lastLater != stringSize - 1)
{
//обрезать строку по размерам откинув точки
myString.erase(lastLater + 1);
}

0

Важно - отмечу, что данной реализацией мы проходимся по строке дважды, в реальности вам это никак не отразиться на результате, но если интересно, можно покапаться и сделать за один проход)