Помощь - Поиск - Пользователи - Календарь
Полная версия: .работаСоСтроками
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
кучаТрупов
оставить в строке фрагменты,симметричные центрального символа, длиной более 5 символов.остальные символы заменить на пробелы(пример - dcbabcd)

привет) помогите пожалуйста реализовать в с++. )
volvo
Ну, в принципе, если тебе не нужны спецсредства С++ (всякие STL-и и тому подобное), то задача решается так:
#include <iostream>

int main()
{
char s[] = "efd0dcbtrartbcdmrewttrj hbu o abcdedcbahg h\0";
char *first = s;
for(char *p = s + 2; *(p + 2); p++)
{
int len;
for(len = 1; p - len >= s && *(p + len) && *(p - len) == *(p + len); len++);
len -= 1;

if(2 * len + 1 > 5)
{
for(char *last = p - len; first != last; )
{
*first++ = ' ';
}
first = p + len + 1;
}
}
for(; *first; )
{
*first++ = ' ';
}
std::cout << s << std::endl;
return 0;
}
(почти чистый С, за исключением вывода результата)

Проверь, отработает ли оно в VC++, я проверял другим компилятором.
кучаТрупов
спасибо большое)
вот то ,что получилось у меня:

Код


// otanocho.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;

string space(string s, int i, int j)
{
    for(int k=i;k<j;k++)
        s[k]=' ';
    return(s);
}
inline int min(int i, int j){ return (i == j) ? i : (i<j ? i : j); }

int index_symmetry(string s, int k)
{
    bool symmetry_availability=true;
    int size=s.size(),
        i=k;
    while((i-k<=min(size-k,k))&&(symmetry_availability==true))
        if (!(s[i]==s[2*k-i]))
            symmetry_availability=false;
        else i++;
    return(i-k-1);
}
void main()
{
    string s;
    int startsel=0,
        endsel=0,
        acc;
    printf("Enter a string, or leave it blank\n");
    getline(cin,s);
    if (s=="")
        s="awwearfsasdfdsadfdf hhksljdjksghjkjhg";
    int size=s.size();
    system("cls");
    printf("accuracy=");
    cin >> acc; cout << "\n";
    cout << s << "\n";
    for(int i=1;i<size;i++)
    {
        if((index_symmetry(s,i)>0)&&(index_symmetry(s,i)>=acc))
        {    
            endsel=i-index_symmetry(s,i);
            if((startsel<endsel)&&(endsel!=0))
                s=space(s,startsel,endsel);
            startsel=i+index_symmetry(s,i)+1;
        }
    }
    s=space(s,startsel,size);
    cout << s << "\n";
    getchar();
    getchar();
}    
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.