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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2016, 18:12   #61
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Надо еще попробать откладку в цикле и заход в функцию.
ura_111 вне форума Ответить с цитированием
Старый 03.07.2016, 18:15   #62
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Удали тот код что мы писали (когда что то меняешь в программе - останавливай программу - меняй - определяйся с точками останова -и запускай снова) - это больше не надо.

И еще попробуй, ради интереса, удалить саму последнюю точку останова - правая кнопка - точка останова - удалить. Когда точка ненужна она удяляется. И со строчки
setlocale(LC_ALL, "Russian");
тоже удали точку останова.
ura_111 вне форума Ответить с цитированием
Старый 03.07.2016, 18:18   #63
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Narsky Посмотреть сообщение
Я вроде бы понял, зачем нужна отладка - делить программу на несколько частей, затем по частям выполнять её, и затем, если находишь ошибку в отдельной части, устранять её.
Отладка это процесс поиска (определение причины, места) и устранения ошибок.

Отладчик это один из инструментов для упрощения этого процесса.

https://ru.wikipedia.org/wiki/%D0%9E...BC%D0%BC%D1%8B
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.07.2016, 18:24   #64
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я уточну. Ты меня понимаешь, что когда я говорю: "удали код что мы писали", нужно удалить код

cout << "ghgssg";
cin >> i;
i++;
i++;
i++;

А когда я говорю удали точку останова со строчки - это значит строчка сама остаесьтя. а красный кружок убрать.(снять)
ura_111 вне форума Ответить с цитированием
Старый 03.07.2016, 18:25   #65
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию

Цитата:
Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатать все слова последовательности, предварительно преобразовав каждое из них по следующему правилу:
1) перенести последнюю букву в начало слова;
2) удалить из слова первую букву.

Примечание: Все операции над строками выполняются отдельными функциями в том порядке, в котором они описаны в задании. Кроме того, в случае необходимости, должна быть реализована проверка на целостность кучи
В общем смотри, вот код на данный момент:
Код:
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
using namespace std;

int main() {
	char string[256];
	char *word1 = new char[6];
	char *word2 = new char[6];
	char *word3 = new char[6];
	char *word4 = new char[6];
	char *word5 = new char[6];
	char *buf;
	char *p;
	char letter;
	int mark;
	int nword;
	int i;
	char *check;

	setlocale(LC_ALL, "Russian");


	for (int i = 0; i < 100; i++)
		string[i] = '\0';

	cout << "Введите вашу строку и нажмите клавишу Enter: " << endl;
	cin.getline(string, 256);
	p = string;
	check = strchr(p, '.');

	if (check == 0)
	{
		cout << "Нет точки! При нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 0;
	}


	mark = 0;
	nword = 0;

	while (*p != '.')
	{
		if (*p == ' ' && mark != 1)
		{
			nword++;
			mark = 1;
		}
		p++;
		if (*p != ' ')
			mark = 0;
		if (*p == '.')
			nword++;
	}


	cout << "Слов: " << nword << endl;

	if (nword == 0)
	{
		cout << "Ошибка! Вы написали только точку! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 0;
	}

	if (nword > 5)
	{
		cout << "Ошибка! Вы написали более 5 слов! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 0;
	}

	buf = strtok(string, " .");
	if (buf == NULL || strlen(buf) > 5)
	{
		cout << "Ошибка! Больше 5 букв в 1 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		delete [] word1;
		return 0;
	}
	else strcpy(word1, buf);

	if (nword >= 2)
	{
		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 2 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			delete[] word2;
			return 0;

		}
		else strcpy(word2, buf);
	}

	if (nword >= 3)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 3 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			delete[] word3;
			return 0;
		}
		else strcpy(word3, buf);
	}

	if (nword >= 4)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 4 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			delete[] word4;
			return 0;
		}
		else strcpy(word4, buf);
	}

	if (nword == 5)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 5 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			delete[] word5;
			return 0;
			memmove(word1 + 1, word1, strlen(word1) - 1);
		}
		else strcpy(word5, buf);
	}

	if (nword >= 1)
	{
		char tmp = word1[strlen(word1) - 1];
		memmove(word1 + 1, word1, strlen(word1));
		word1[0] = tmp;
		cout << word1 << " ";
		memmove(word2 + 1, word2, strlen(word2) - 1);
	}
	if (nword >= 2)
	{
		char tmp = word2[strlen(word2) - 1];
		memmove(word2 + 1, word2, strlen(word2));
		word2[0] = tmp;
		cout << word2 << " ";
		memmove(word3 + 1, word3, strlen(word3) - 1);
	}
	if (nword >= 3)
	{
		char tmp = word3[strlen(word3) - 1];
		memmove(word3 + 1, word3, strlen(word3));
		word3[0] = tmp;
		cout << word3 << " ";
		memmove(word4 + 1, word4, strlen(word4) - 1);
	}
	if (nword >= 4)
	{
		char tmp = word4[strlen(word4) - 1];
		memmove(word4 + 1, word4, strlen(word4));
		word4[0] = tmp;
		cout << word4 << " ";
		memmove(word5 + 1, word5, strlen(word5) - 1);
	}
	if (nword == 5)
	{
		char tmp = word5[strlen(word5) - 1];
		memmove(word5 + 1, word5, strlen(word5));
		word5[0] = tmp;
		cout << word5 << ".";
	}


	delete [] word1;
	delete [] word2;
	delete [] word3;
	delete [] word4;
	delete [] word5;
	system("pause");
	return 0;
}
А вот код для первого слова второй части задания:
Код:
if (nword >= 1)
	{
		word1[0] = '_';
		cout << word1 << ' ';
	}
Он кажется слишком простым, так что подозреваю, тут есть где-то ошибка + во втором коде word1 будет равно не изначальному word1, введеным пользователем, а измененному word1 (после первой части задания)? Я не уверен, но наверное нужно задать переменные, допустим letter1, letter2 и т.д., а затем в первой части задания этим переменным присвоить word1 и т.д., как думаешь?
Narsky вне форума Ответить с цитированием
Старый 03.07.2016, 18:28   #66
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Задачу, которую я ставил перед собой - это научить тебя с отладки, а не решить тебе задачу. Это ты сам сделаешь (а также все задачи, которые у тебя остались)

Ты готов продолжать?
ura_111 вне форума Ответить с цитированием
Старый 03.07.2016, 18:30   #67
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А зачем тут new и delete?
можно ж просто
Код:
char word1[6];
Ну и вместо word1, word2 и т.п. лучше массив и цикл.

Сразу станет в 5 раз меньше копипастокода
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.07.2016, 18:41   #68
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию

Цитата:
Ты готов продолжать?
Извини, нет, у меня нет на это времени) Но я примерно понял, зачем нужна отладка, спасибо
Цитата:
А зачем тут new и delete?
можно ж просто
Ну, заранее не известно, из скольких символов будет состоять слово, введенное пользователем, известно, что не больше пяти.
Цитата:
Ну и вместо word1, word2 и т.п. лучше массив и цикл.
что-то вроде:
Код:
char word[*word1, *word2, *word3, *word4, *word5];
for (int i = 0; i < 5; i++)
{
if (nword >= i + 1)
	{
		char tmp = word[i][strlen(word[i]) - 1];
		memmove(word[i] + 1, word[i], strlen(word[i]));
		word[i][0] = tmp;
		cout << word[i] << " ";
		memmove(word[i+1] + 1, word[i+2], strlen(word[i+1]) - 1);
	}
Но тут у меня бред написан, в таком случае нужно использовать массив указателей?
Narsky вне форума Ответить с цитированием
Старый 03.07.2016, 18:54   #69
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так известно ж, "не больше пяти". В Си в конце каждой строки (то есть слова у вас) должен быть 0.
И вы все равно ж выделяете память всегда под 6 байтов.

Про массив, надо массив строк (ну или двумерный массив символов).
std::string + std::vector если С++.
Если С, то что-то типа
Код:
const int wordCount = 5;
const int wordSize = 6;
char words[wordCount][wordSize];

for (int i = 0; i < wordCount; i++)
{
    сделать что-то с words[i]
    strcpy(words[i], "smth");
    printf("%s ", words[i]);
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 03.07.2016 в 18:56.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из текстового файла прочитать предложение, первую букву каждого слова сделать большой romaust C# (си шарп) 0 04.05.2016 10:51
Pascal ABC. В текстовом русскоязычном файле убрать все слова, начинающиеся на букву «а» и одновременно содержащие букву «о» MarsLoveMoon Паскаль, Turbo Pascal, PascalABC.NET 8 25.04.2014 17:03
Дан текст, состоящий из букв и пробелов, слова разделяются пробелом. Поменять первую и вторую букву каждого слова. danteone Помощь студентам 6 21.05.2012 12:31
Удаление повторных вхождений. Переместить последнюю букву в начало слова. mo_Ouse C# (си шарп) 4 21.04.2012 20:53
Поменять 1 и последнюю букву последнего слова а строке с++ Bolisoff Помощь студентам 1 10.01.2012 18:22