Во многих прикладных задачах необходимо осуществлять различные операции со строками. Две достаточно часто встречающиеся операции — это разворот строки и конкатенация двух или нескольких строк.
В результате разворота строки s получается строка sR, которая состоит из тех же символов, что и s, но идущих в обратном порядке. Например, в результате разворота строки "abcde" получается строка "edcba". Далее в этой задаче вместо обозначения sR будет использоваться обозначение (s).
В результате конкатенации двух строк s и t получается строка st, в которой сначала записаны символы строки s, а затем — символы строки t. Аналогичным образом определяется конкатенация трех, четырех и большего числа строк. Например, при конкатенации строк "abc" и "cda" получается строка "abccda".
Ваша задача — определить результат конкатенации нескольких строк, часть из которых необходимо развернуть.
Входные данные
Состоит из единственной строки, которая содержит только строчные буквы латинского алфавита и круглые скобки. Ее длина не превышает 200 символов. Эта строка описывает конкатенацию нескольких строк, часть из которых необходимо развернуть.
В заданной строке правее каждой открывающей скобки есть закрывающая, левее каждой закрывающей есть открывающая, причем между соответствующими друг другу открывающей и закрывающей скобками других скобок нет и обязательно есть хотя бы одна буква.
Выходные данные
Выведите результат конкатенации.
#include <iostream> #include <stdlib.h> #include <math.h> #include <string.h> using namespace std; int main() { setlocale (LC_ALL, "Russian"); char str[256] ,copy[256];int k=0,i,j; cin>>str; int n=strlen(str); j=0; for (i=0;i<n;) { if (str[i]=='(') { while (str[i]!=')') { i++; k++; } for (int m=i;m>=i-k+1;m--) { copy[j]=str[m]; j=j+1; } k=0; } else { copy[j]=str[i]; j=j+1; i=i+1; } } copy[j]='\0'; int leng=strlen(copy); for (i=0;i<leng;i++) { if (copy[i]>='a' && copy[i]<='z' || copy[i]>='A' && copy[i]<='Z') cout<<copy[i]; } cout<<endl; return 0; }
Есть решение которого нет на сайте? Пиши admin@devexe.top