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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2019, 12:11   #1
VLADOS2001
Пользователь
 
Регистрация: 19.09.2019
Сообщений: 23
По умолчанию [C++] Задача c CHAR

Ввести с клавиатуры массив char -> S && string STR . Выделить в ней все существующие символы и вывести для каждого из символов позицию последнего вхождения в заданную последовательность S При этом символы выводить последовательно в соответствии с порядком их первого вхождения в S
Не работает если выбрать вариант с char!!!!!




Код:
#include <iostream>

#include <cstdlib>

#include <string>

#include <thread>

#include <chrono>

using namespace std;

int main()
{
	setlocale(NULL, "RUS");

label:

	system("color 02");

	int NUM_MENU;

	cout << "Выбор метода: 1) STRING; 2) CHAR; " << endl;

	cin >> NUM_MENU;

	if (NUM_MENU == 1) {

		string str, str1;

		cout << "Введите строку"<<endl;

		getline(cin, str);

		str1 = str;

		size_t size = str.size();

		for (size_t i = 0; i < size; i++)
			for (size_t j = 0; j < size; j++)
			{
				if (i == j) continue;
				if (str[i] == str[j])
				{
					for (size_t k = j; k < size - 1; k++)
						str[k] = str[k + 1];
					size--;
					i--;
				}
			}

		for (size_t i = 0; i < size; i++)

			cout << str[i] << "  " << str1.find_last_of(str[i]) + 1 << endl;
	}

	else if (NUM_MENU == 2)
	{

		int arr;

		cout << "Введите объем массива: " << endl;

		cin >> arr;

		char* str=new char[arr],*str1=new char[arr];

		cout << "Введите строку" << endl;

		cin >> str;
		str1 = str;
		

		for (size_t i = 0; i < arr; i++)
			for (size_t j = 0; j < arr; j++)
			{
				if (i == j) continue;
				if (str[i] == str[j])
				{
					for (size_t k = j; k < arr - 1; k++)
						str[k] = str[k + 1];
					arr--;
					i--;
				}
			}

		for (size_t i = 0; i < arr; i++)

			cout << str[i] << "  "  << endl;

	}
	else {

		system("cls");

		cout << "Введенное значение нарушает условие задачи.  " << endl;

		this_thread::sleep_for(chrono::seconds(5));

		system("cls");

		goto label;

	}

	system("pause");

	return 0;
}
VLADOS2001 вне форума Ответить с цитированием
Старый 29.09.2019, 12:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А должно?

Код:
char* str=new char[arr],*str1=new char[arr];
Нулевой символ учли?

Код:
str1 = str;
Зачем? str1 вы нигде не используете + так чаровские строки не копируютя.

Код:
for (size_t i = 0; i < arr; i++)
			for (size_t j = 0; j < arr; j++)
А если ввели не arr симвлов в строке? Кто вас просил строку менять?

Код:
		for (size_t i = 0; i < arr; i++)

			cout << str[i] << "  "  << endl;
Код:
		for (size_t i = 0; i < size; i++)

			cout << str[i] << "  " << str1.find_last_of(str[i]) + 1 << endl;
Разницу видите? Подскажу, find не для красоты...
p51x вне форума Ответить с цитированием
Старый 29.09.2019, 12:24   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от VLADOS2001 Посмотреть сообщение
Не работает
Не говорите просто "не работает", описывайте что именно происходит, как не работает.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.09.2019, 12:29   #4
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

А что работает?
Для выбора вариантов используйте операторы: switch, case.
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 29.09.2019, 12:43   #5
VLADOSW2001
Пользователь
 
Регистрация: 15.09.2019
Сообщений: 30
По умолчанию

Не считает последние вхождение элемента в последовательность (только если выбрать CHAR). String версия работает

Последний раз редактировалось VLADOSW2001; 29.09.2019 в 12:46.
VLADOSW2001 вне форума Ответить с цитированием
Старый 29.09.2019, 13:02   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

"Не считает", так же как и "не работает", не несет никакой полезной инфы.
Крэшится программа (с какой ошибкой?)? Выдает неправильный результат (какой? какой должен быть?)? ...?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.09.2019, 13:18   #7
VLADOSW2001
Пользователь
 
Регистрация: 15.09.2019
Сообщений: 30
По умолчанию

Input : root
Output r 1
o 3
t 4
У меня просто
r
o
t
VLADOSW2001 вне форума Ответить с цитированием
Старый 29.09.2019, 13:25   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Я же вам все написал. Вы позицию НЕ ВЫВОДИТЕ. Откуда цифры вылезут?
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
char * conver (char *somestr) вылетает с exception mosq Общие вопросы C/C++ 2 23.02.2013 02:23
как исправить ошибку invalid conversion from const char* to char Ника К Помощь студентам 5 01.06.2012 00:13
Задача на char sc0pus Паскаль, Turbo Pascal, PascalABC.NET 0 22.05.2012 15:46
Задача на работу с массивом + char (Delphi в консольном режиме) [COOLER] Помощь студентам 9 02.01.2010 20:16
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17