Задача:
Цитата:
Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатать все слова последовательности, предварительно преобразовав каждое из них по следующему правилу:
1) перенести последнюю букву в начало слова;
2) удалить из слова первую букву.
Примечание: Все операции над строками выполняются отдельными функциями в том порядке, в котором они описаны в задании. Кроме того, в случае необходимости, должна быть реализована проверка на целостность кучи (см. приложение 2). Основы работы со строками в Си описаны в приложении 4.
|
Код:
Код:
#include <iostream>
#include <string>
using namespace std;
int main(){
char string[256];
char *word1 = new char[];
char *word2 = new char[];
char *word3 = new char[];
char *word4 = new char[];
char *word5 = new char[];
char *buf;
char *p;
char buf1;
int mark;
int nword;
char *check;
int max;
char out1[] = "\0\0\0\0\0";
char out2[] = "\0\0\0\0\0";
char out3[] = "\0\0\0\0\0";
char out4[] = "\0\0\0\0\0";
char out5[] = "\0\0\0\0\0";
setlocale(LC_ALL, "Russian");
cout << "Строки" << endl << "Автор: студент гр. РИ-150005 Рогожников Роман Сергеевич" << endl << "Екатеринбург, 2016 г." << endl;
for (int i = 0; i < 100; i++)
string[i] = '\0';
cout << "Введите вашу строку и нажмите клавишу Enter: " << endl;
cin >> string;
check = strchr(string, '.');
if (check == 0)
{
cout << "Нет точки! При нажатии любой клавиши программа завершится!" << endl;
system("pause");
return 1;
}
p = string;
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 1;
}
if (nword > 5)
{
cout <<"Ошибка! Вы написали более 5 слов! \nПри нажатии любой клавиши программа завершится!" << endl;
system("pause");
return 1;
}
buf = strtok(string, " .");
if (buf == NULL || strlen(buf) > 5)
{
cout << "Ошибка! Больше 5 букв в 1 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
system("pause");
return 1;
}
else memcpy(word1, buf, 6);
if (nword >= 2)
{
buf = strtok(NULL, " .");
if (buf == NULL || strlen(buf) > 5)
{
cout << "Ошибка! Больше 5 букв в 2 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
system("pause");
return 1;
}
else memcpy(word2, buf, 6);
}
if (nword >= 3)
{
buf = strtok(NULL, " .");
if (buf == NULL || strlen(buf) > 5)
{
cout << "Ошибка! Больше 5 букв в 3 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
system("pause");
return 1;
}
else memcpy(word3, buf, 6);
}
if (nword >= 4)
{
buf = strtok(NULL, " .");
if (buf == NULL || strlen(buf) > 5)
{
cout << "Ошибка! Больше 5 букв в 4 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
system("pause");
return 1;
}
else memcpy(word4, buf, 6);
}
if (nword == 5)
{
buf = strtok(NULL, " .");
if (buf == NULL || strlen(buf) > 5)
{
cout << "Ошибка! Больше 5 букв в 5 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
system("pause");
return 1;
}
else memcpy(word5, buf, 6);
}
if (nword >= 1)
{
buf1 = out1[0];
for (int i = 0; i < 5; i++)
{
max = i;
out1[0] = out1[max];
}
out1[max] = buf1;
cout << "Первое измененное слово: " << out1 << endl;
}
if (nword >= 2)
{
buf1 = out2[0];
for (int i = 0; i < 5; i++)
{
max = i;
out2[0] = out2[max];
}
out2[max] = buf1;
cout << "Второе измененное слово: " << out2 << endl;
}
if (nword >= 3)
{
buf1 = out3[0];
for (int i = 0; i < 5; i++)
{
max = i;
out3[0] = out3[max];
}
out3[max] = buf1;
cout << "Третье измененное слово: " << out3 << endl;
}
if (nword >= 4)
{
buf1 = out4[0];
for (int i = 0; i < 5; i++)
{
max = i;
out4[0] = out4[max];
}
out4[max] = buf1;
cout << "Четвертое измененное слово: " << out4 << endl;
}
if (nword >= 5)
{
buf1 = out5[0];
for (int i = 0; i < 5; i++)
{
max = i;
out5[0] = out5[max];
}
out5[max] = buf1;
cout << "Пятое измененное слово: " << out5 << endl;
}
free(word1);
free(word2);
free(word3);
free(word4);
free(word5);
system("pause");
return 0;
}
Чувствую, здесь много ошибок, надеюсь на вашу помощь.) (ко второму заданию пока не приступал)