Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2016, 21:41   #1
BMW M6
 
Регистрация: 30.10.2016
Сообщений: 4
По умолчанию Начинать предложения с заглавной буквы.

Доброго времени суток, в университете дали задачу по С++.
Не могу понять как её сделать.
Вот условия задачи: "С клавиатуры вводится текст, заканчивающийся слэшем (/). Вывести этот текст, исправив таким образов, чтобы предложения начинались с заглавной буквы, а остальные были строчными."
Я попытался что-то придумать, но увы дальше идеи не идут в голову.
Попытка:
Код:
/*
Задача: С клавиатуры вводится текст, заканчивающийся '/'. Вывести этот текст, исправив таким образом, чтобы предложения начинались с заглавной буквы, а остальные были строчными.
*/
 
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    std::string text;
    std::cout << "Введите текст, заканчивающийся слэшем (/):" << std::endl;
    std::getline(std::cin, text);
 
    while (text.empty())
    {
        std::cout << "Вы не ввели текст! Повторите попытку." << std::endl;
        std::getline(std::cin, text);
    }
    
    while (text[text.size() - 1] != '/')
    {
        std::cout << "Строка не заканчивается слэшем (/)! Повторите попытку." << std::endl;
        std::getline(std::cin, text);
    }
 
    system("pause");
 
    return 0;
}
В моём решение я использую вроде как ООП, с которым мы не знакомились в университете.
Помогите с решением пожалуйста.
BMW M6 вне форума Ответить с цитированием
Старый 30.10.2016, 22:48   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну видимо дальше надо разделить текст на предложения (по знакам препинания типа '.', '!', '?') и заменить буквы.

Только сейчас у вас в text будет только последнее предложение, а не все. И первый цикл вообще непонятно зачем.

Цитата:
Сообщение от BMW M6 Посмотреть сообщение
В моём решение я использую вроде как ООП
где?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 30.10.2016 в 22:50.
Alex11223 вне форума Ответить с цитированием
Старый 31.10.2016, 09:39   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
где?
В std::string, std::cout ))
p51x вне форума Ответить с цитированием
Старый 31.10.2016, 23:26   #4
BMW M6
 
Регистрация: 30.10.2016
Сообщений: 4
По умолчанию

Сделал я задачу
Код:
/*
Задача: С клавиатуры вводится текст, заканчивающийся '/'. Вывести этот текст, исправив таким образом, чтобы предложения начинались с заглавной буквы, а остальные были строчными.
*/

#include <iostream>
#include <string>

using namespace std;

int main() {
	setlocale(LC_ALL, "Russian");

	std::string text;
	std::cout << "Введите текст, заканчивающийся слэшем (/):" << std::endl;
	std::getline(std::cin, text);

	while (text.empty())
	{
		std::cout << "Вы не ввели текст! Повторите попытку." << std::endl;
		std::getline(std::cin, text);
	}

	while (text[text.size() - 1] != '/')
	{
		std::cout << "Строка не заканчивается слэшем (/)! Повторите попытку." << std::endl;
		std::getline(std::cin, text);
	}

	

	//Перебираем в цикле каждый символ текста
	for (int i = 0; i <= text.size(); i++)
	{
		//Ищем конец предложения
		if (text[i] == '.' || text[i] == '!' || text[i] == '?')
		{
			int k = i + 1; //Переменая для значения символова, которому будем менять регистр

			//Выполняем цикл до тех пор пока не найдём начало нового предложения, так как пробле может быть не один, а несколько.
			while (text[k] == ' ')
			{
				k++;
			}

			//Если символ строчный, то меняем его на заглавный.
			if (islower(text[k]))
			{
				text[k] = toupper(text[k]);
			}
		}
	}

	std::cout << "-----------------------------------------------------" << std::endl;
	std::cout << text << std::endl;

	system("pause");

	return 0;
}
Хотелось бы услышать мнение опытных людей, что и где не так
В универе на красоту кода не смотрят, а эстетики хочется.
Буду благодарен!
BMW M6 вне форума Ответить с цитированием
Старый 31.10.2016, 23:35   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Все так же в text будет только последняя строка, а не все строки. В задании скорее всего имелось в виду, что можно вводить несколько строк (строка1, Enter, строка2, Enter, строка3/, Enter) иначе какой смысл в /.

в for скорее всего надо <, а не <=, с 0 же нумерация.

И еще вроде не бывает локали "Russian".
Скорее всего это эквивалентно "" если работает.
http://en.cppreference.com/w/cpp/locale/setlocale
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 31.10.2016 в 23:45.
Alex11223 вне форума Ответить с цитированием
Старый 01.11.2016, 22:01   #6
BMW M6
 
Регистрация: 30.10.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Все так же в text будет только последняя строка, а не все строки. В задании скорее всего имелось в виду, что можно вводить несколько строк (строка1, Enter, строка2, Enter, строка3/, Enter) иначе какой смысл в /.

в for скорее всего надо <, а не <=, с 0 же нумерация.

И еще вроде не бывает локали "Russian".
Скорее всего это эквивалентно "" если работает.
http://en.cppreference.com/w/cpp/locale/setlocale
Всё работает. Читает все предложения.

Но с русскими буквами не прокатывает, может и вправду из-за "Russian", но так учили нас в универе.
BMW M6 вне форума Ответить с цитированием
Старый 01.11.2016, 22:10   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Я про строки (несколько раз ввести нажимая Enter), а не предложения.

А про русский наверно надо SetConsoleOutputCP(1252) или что-то типа того.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.11.2016, 18:56   #8
BMW M6
 
Регистрация: 30.10.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Я про строки (несколько раз ввести нажимая Enter), а не предложения.

А про русский наверно надо SetConsoleOutputCP(1252) или что-то типа того.
И как исправить момент со строками?
Совет с кодировкой консоли не помог...
BMW M6 вне форума Ответить с цитированием
Старый 04.11.2016, 21:42   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что-нибудь типа
Код:
string text;
do
{
    string line = прочитать строку;
    text += line;
} while (text не заканчивается на '/')
Если может быть ввод "qwe/asdf", то еще line обрезать до /
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все с заглавной буквы Vitalii197777 Microsoft Office Access 2 23.10.2016 20:23
как удалить определенные символы(буквы) из предложения? emdroof C# (си шарп) 3 04.04.2013 00:20
Запишите символически следующие сложные предложения, употребляя буквы для обозначения простых компонентов предложения. NIKALEX1995 Помощь студентам 1 23.12.2012 13:27
прогу, чтобы кодировала буквы, слова, предложения, и выдавала закодированные письмена ( Турбо паскаль ) Afroditaa Помощь студентам 4 10.04.2012 15:01
Установка заглавной буквы Nezhdanka Microsoft Office Excel 6 21.09.2010 21:51