@The_Beginer

Как заменить букву в строке на прописную и обратно?

Программа должна менять символы в строке. Если заглавная буква то она должна быть строчной и наоборот.Использовать функции cctype.
Я по всей строке прохожу циклом и с помощью условного оператора и функций toupper, tolower пытаюсь заменить символы в строке, но не работает(как вы посмотрите на рисунке ниже он пишет цифры, а потом уже выводим строку но без изменений)

5eeb45c4ccb89705096288.jpeg

#include "stdafx.h"
#include <iostream>
#include <string>
#include <cctype>

const int strSize = 100;

using namespace std;


int main()
{
	setlocale(LC_ALL, "Russian");
	char ch[strSize];
	char ch1[strSize] = { 0 };
	int itar=0;
	char *ptr=ch1;
	cout << "Введите строку:\n";
	cin >> ch;
-----//Рабочий код, не выкладываю///-------
	cout << "Преобразованная строка:"<<ch1<< endl;
	cout << "Работаем с регистрами" << endl;
	for (int i = 0; i < strlen(ch1); i++)//Прохожу всю строку циклом
	{
		if (tolower(ch1[i])) //Если буква маленькая выводим вместо неё большую
			cout<<toupper(ch1[i]);
		if (toupper(ch1[i]))
			cout<<tolower(ch1[i]); //Если буква большая выводим маленькую букву
	}
	cout << ch1 << endl;//Вывод строки?

	system("pause");
    return 0;
}
  • Вопрос задан
  • 5407 просмотров
Решения вопроса 1
tolower выдаёт сконвертированный символ, причём в виде int (о ужас!), его надо сразу вручную кастануть к char. Это то, что надо выводить.
islower проверяет, является ли аргумент строчной буквой и возвращает тоже int (о ужас!), его надо сразу вручную кастануть к bool. Это то, что надо проверять в if.

То, что программа вообще компилируется - "заслуга" авторов этих функций, в то время типы ни во что не ставили.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы