Задача:
Цитата:
Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатать все слова последовательности, предварительно преобразовав каждое из них по следующему правилу:
1) перенести последнюю букву в начало слова;
2) удалить из слова первую букву.
Примечание: Все операции над строками выполняются отдельными функциями в том порядке, в котором они описаны в задании. Кроме того, в случае необходимости, должна быть реализована проверка на целостность кучи
|
Часть кода:
Код:
#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 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");
for (int i = 0; i < 100; i++)
string[i] = '\0';
cout << "Введите вашу строку и нажмите клавишу Enter: " << endl;
cin >> string;
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");
return 0;
}
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 0;
}
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 0;
}
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 0;
}
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 0;
}
else memcpy(word5, buf, 6);
}
delete(word1);
delete(word2);
delete(word3);
delete(word4);
delete(word5);
system("pause");
return 0;
}
Когда я вписываю одно слово, не используя пробел, все нормально выходит, но только мне стоит написать два слова, через пробел, выходит ошибка, что нет точки, хотя я её ставлю. В чем проблема?