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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2015, 15:36   #1
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
Сообщение Двумерный динамический массив строк

Создать двумерный динамический массив на 5 ячеек (для пяти строк). Заполнить его строчками текста, принятыми с клавиатуры.

Реализовать меню:
1) Отсортировать строки по возрастанию
2) Заменить все буквы "б" в массиве на цифру 0
3) Развернуть все строки задом наперед
4) В случайной строке заменить первые 3 символа на первые 3 символа введенного пользователем ключа (последовательности символов/строки)
5) Во всем массиве заменить первые 3 символа строки на строку «ааа»

Использовать в коде указатели и функции.

Вот что наработал:
Код:
#include "iostream"
#include "stdlib.h"
using namespace std;

int main()
{
	srand(time(NULL));
	int sizemas = 10;
	char **mas = new char * [sizemas];
	for (int i = 0; i < sizemas; i++)
	{
		mas[i] = new char;
		cout << "Укажите" << " " << i+1 << " "<< "строку" << endl;
		cin >> mas[i];
	}
	return 0;
}

#include "iostream"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
using namespace std;

void menu (char **mas, int sizemas);
void m1 (char **mas, int sizemas);
void m2 (char **mas, int sizemas);
void m3 (char **mas, int sizemas);
void m4 (char **mas, int sizemas);
void m5 (char **mas, int sizemas);

int main()
{
	srand(time(NULL));
	int sizemas = 10;
	char **mas = new char * [sizemas];
	for (int i = 0; i < sizemas; i++)
	{
		mas[i] = new char;
		cout << "Укажите" << " " << i+1 << " "<< "строку" << endl;
		cin >> mas[i];
	}
	menu(mas,sizemas);
	return 0;
}

void menu (char **mas, int sizemas)
{
	int n;
	do
	{
	void (*menu_mas[])(char **, int) = {m1,m2,m3,m4,m5};
	int vibor;
	cout << "Menu" <<endl;
	cout << "Чтобы отсортировать строки по возрастанию нажмите (1)"<<endl;
	cout << "Чтобы заменить все буквы ‘а’ в массиве на цифру 0 нажмите (2)"<<endl;
	cout << "Чтобы развернуть все строки задом наперед  нажмите (3)"<<endl;
	cout << "Чтобы в случайной строке заменить первые 3 символа на первые 3 символа введенного пользователем ключа нажмите (4)"<<endl;
	cout << "Чтобы во всем массиве заменить первые 3 символа строки на строку «ааа» нажмите (5)"<<endl;
	cin >> vibor;
	(*menu_mas[vibor-1])(mas,sizemas);
	cout << " Желаете выбрать еще что то в меню?\n 1. Да\n 2. Нет" <<endl;
	cin >> n;
}
while (n==1);
}
void m1 (char **mas, int sizemas)
{
	int tmp;
	for (int k=0; k < sizemas; k++)
		for (int i = 0; i < sizemas - 1 - k; i++)
			if (mas[i][0] > mas[i+1][0])
				for (int j = 0; j < sizemas; j++)
				{
					tmp = mas[i][j];
					mas[i][j] = mas[i + 1][j];
					mas[i + 1][j] = tmp;
				}
	cout <<endl;
	for (int i = 0; i < sizemas; i++)
	{
		for (int j=0; j < sizemas; j++)
			cout << mas[i][j] << " ";
		cout <<endl;
	}
	for (int i = 0; i < sizemas; i++)
		delete [] mas[i];
	delete [] mas;

}
void m2 (char **mas, int sizemas)
{
	for (int i = 0; i < sizemas; i++)
	{
		for (int j=0; j < strlen(mas[i]); j++)
			if (mas[i][j] == 'a')
				mas[i][j] = '0';

	}
for (int i = 0; i < sizemas; i++)
	{
		for (int j=0; j < sizemas; j++)
			cout << mas[i][j] << " ";
		cout <<endl;
	}
	for (int i = 0; i < sizemas; i++)
		delete [] mas[i];
	delete [] mas;
}
void m3 (char **mas, int sizemas)
{

	for (int i = 0; i < sizemas; i++)
	{
		strrev(mas[i]);
		printf(mas[i]);
	}
for (int i = 0; i < sizemas; i++)
		delete [] mas[i];
	delete [] mas;
}

(void m4 (char **mas, int sizemas)
{

}
void m5 (char **mas, int sizemas)
{

}
Помогите с четвертой и пятой функцией. Исправте найденные ошибки. И помогите промодернизировать код.
Андрей Иванов вне форума Ответить с цитированием
Старый 04.05.2015, 15:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
5) Во всем массиве заменить первые 3 символа строки на строку «ааа»
«ааа» - есть такое слово )))
Код:
void m5 (char **mas, int sizemas)
{
  int i,l; for(i=0;i<sizemas;i++) {
   l:=strlen(mas[i]);
   if(l>0) mas[i][0]='a';
   if(l>1) mas[i][1]='a'
   if(l>2)  mas[i][2]='a';
  };
}
Годится такое?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2015, 15:49   #3
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Годится такое?
Годится. А с четвертым помочь не можете?
Андрей Иванов вне форума Ответить с цитированием
Старый 04.05.2015, 16:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Могу, если обьяснишь что это за ключ там такой упомянут.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2015, 16:14   #5
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
Сообщение

Надо через random сгенерировать случайный номер строки в диапазоне от 1 до 5. Принять с клавиатуры ключ (например слово "тачка"). И первые три символа случайной строки заменить на "тач".
Андрей Иванов вне форума Ответить с цитированием
Старый 04.05.2015, 16:54   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
void m4 (char **mas, int sizemas)
{
  int i=rand()%sizemas; 
  char s[3]; scanf("%s",&s);
  
   l:=strlen(mas[i]);
   if(l>0) mas[i][0]=s[0];
   if(l>1) mas[i][1]=s[1];
   if(l>2)  mas[i][2]=s[2];
  
}
Не проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2015, 17:17   #7
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
По умолчанию

Stilet, скажите что не так написал в первом задании не правильно сортирует.
Андрей Иванов вне форума Ответить с цитированием
Старый 04.05.2015, 17:32   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if (mas[i][0] > mas[i+1][0])
Замени на
Код:
if (strcmp(mas[i], mas[k])>0)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2015, 17:39   #9
Андрей Иванов
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 60
По умолчанию

Все равно не работает.
Андрей Иванов вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический двумерный массив в c++ 1apre Помощь студентам 2 06.04.2013 15:13
Двумерный динамический массив Sauber Помощь студентам 2 22.03.2011 08:02
двумерный динамический массив с запросом к пользователю о кол-ве строк и столбцов? vasyapupkin Общие вопросы C/C++ 2 22.11.2009 17:37
Двумерный динамический массив IceExecutioner Общие вопросы Delphi 1 04.06.2009 08:41