#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
void pack (char *mas, int save) {
char *pas=(char*) malloc(sizeof(char)*save);
int k=0,j=0; // к-количество пробелов, джи-итератор нового массива
//безпробельной строки
for (int i = 0; i < save; i++) {
if (mas!=' ') {pas[j]=mas; }
else {k++; continue;} j++;
}
for (int i = 0; i< save - k; i++) {
if (pas!=pas[save-k-1-i]) { //если несовпадает то не палиндром
cout << "ne"; getch(); exit(0); }
}
cout << "packed";
getch();
exit(0);
}
void main()
{
char mas[100]; int save=0; //в сейве общее количество символов
cin.getline(mas,99); //все записуем в массив
for (int i = 0; i < 100; i++)
if (mas=='\0') { //ищем конец
save=i; break;
}
for (int i = 0; i < save; i++) {
if (mas!=mas[save-1-i] || mas==' ') //если несовпадения или //пробел
pack(mas,save); //функция проверки упакованого
}
cout << "normal";
getch();
}
палиндромы(с++)
примеры:
"ТОПОТ" обычный палиндром
"А роза упала на лапу Азора" упакованный
"у лип Лёша нашёл пилу" упакованный
Идешь по слову до середины справа на лево и слева на право и сравниваешь буквы. Если буквы одинаковые - слово является палиндромом, иначе - убираешь пробелы и опять повторяешь сравнение, т.о. получаешь является ли строка упакованным палиндромом.
Другой алгоритм:
Разделяешь строку на две равные половины, одну из половин реверсируешь и сравниваешь с другой. Если не совпали - строка не полиндром, убираешь из исходной строки пробелы и повторяешь.
ну да, сам алгоритм понятен, нужно составить что то вроде блоксхемы, всё подробно описать, когда какой массив создавать, что после чего делать.. чем подробнее тем лучше
я так подумал, если указан язык, то код надо, и по ниму можно и алгоритм написать
Цитата: bolt90
я так подумал, если указан язык, то код надо, и по ниму можно и алгоритм написать
<code skip>
<code skip>
Ужас! Отвратительный код.
Совет: научись использовать C++.
Цитата: bolt90
пробуй минимизировать
легко:
Код:
bool isPalindrome(const string& str)
{
return equal(str.begin(), str.begin()+str.size()/2, str.rbegin());
}
bool isPackPalindrome(const string& str)
{
string s;
remove_copy_if(str.begin(), str.end(), insert_iterator<string>(s, s.begin()), isspace);
return isPalindrome(s);
}
int main()
{
cout << "Input a string: ";
string str;
getline(cin, str);
cout << "This is "
<< (isPalindrome(str) ? "a" : isPackPalindrome(str) ? "a packed" : "not")
<< " palindrome" << endl;
return 0;
}
{
return equal(str.begin(), str.begin()+str.size()/2, str.rbegin());
}
bool isPackPalindrome(const string& str)
{
string s;
remove_copy_if(str.begin(), str.end(), insert_iterator<string>(s, s.begin()), isspace);
return isPalindrome(s);
}
int main()
{
cout << "Input a string: ";
string str;
getline(cin, str);
cout << "This is "
<< (isPalindrome(str) ? "a" : isPackPalindrome(str) ? "a packed" : "not")
<< " palindrome" << endl;
return 0;
}
код не работает((
Цитата: Paradoxek
код не работает((
Все работает. Ошибки в студию. #include <string>
#include <algorithm> есть ? Ты ж смотри что тебе дают,а не срисовывай
код.:)