Форум «Всё о Паскале» _ Ада и другие языки _ .работаСоСтроками
Автор: кучаТрупов 30.10.2009 22:43
оставить в строке фрагменты,симметричные центрального символа, длиной более 5 символов.остальные символы заменить на пробелы(пример - dcbabcd)
привет) помогите пожалуйста реализовать в с++. )
Автор: volvo 31.10.2009 0:58
Ну, в принципе, если тебе не нужны спецсредства С++ (всякие 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++, я проверял другим компилятором.
Автор: кучаТрупов 10.11.2009 0:20
спасибо большое) вот то ,что получилось у меня:
Код
// 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(); }