/*
Kelsey
Hawkins
Senior
(3)
Enloe
High
ACSL
#3
*/
#include
<iostream.h>
#include
<conio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<stdio.h>
#include
<dos.h>
char
*strsub(char *str,int p,int l) {
char *substr= new char[50];
for(int i=0;i<l;i++)
substr[i]= str[i+p-1];
substr[l]= 0;
return substr;
}
char
*leftShift(char *str,int x) {
int size= strlen(str);
str+= x;
for(int i=size-x;i<size;i++)
str[i]= '#';
str[size]= 0;
return str;
}
char
*rightShift(char *str,int x) {
int size= strlen(str);
str-= x;
for(int i=0;i<x;i++)
str[i]= '#';
str[size]= 0;
return str;
}
char
*leftCirc1(char *str) {
int size= strlen(str);
str[size]= str[0];
str++;
str[size]= 0;
return str;
}
char
*rightCirc1(char *str) {
int size= strlen(str);
str--;
str[0]= str[size];
str[size]= 0;
return str;
}
char
*leftCirc(char *str,int x) {
for(int i=0;i<x;i++)
str= leftCirc1(str);
return str;
}
char
*rightCirc(char *str,int x) {
for(int i=0;i<x;i++)
str= rightCirc1(str);
return str;
}
char
*subCirc(char *str,int s,int l,int x,char d) {
char *substr= strsub(str,s,l);
if(d=='R')
substr=
rightCirc(substr,x);
else
substr=
leftCirc(substr,x);
for(int j=0;j<l;j++)
str[j+s-1]= substr[j];
return str;
}
char
*revStr(char *str,int s,int l) {
char *substr= strsub(str,s,l);
substr= strrev(substr);
for(int j=0;j<l;j++)
str[j+s-1]= substr[j];
return str;
}
char
*swapStr(char *str,int s,int l,int p) {
char *substr1= strsub(str,s,l),
*substr2= strsub(str,p,l);
for(int k=0;k<l;k++)
str[k+p-1]= substr1[k];
for(int n=0;n<l;n++)
str[n+s-1]= substr2[n];
return str;
}
char
*sort(char *str) {
int size= strlen(str);
for(int i=0;i<size-1;i++)
for(int
j=0;j<size-1;j++)
if(str[j]>str[j+1])
{
char
temp= str[j];
str[j]=
str[j+1];
str[j+1]=
temp;
}
return str;
}
char
*sortStr(char *str,int s,int l,char m) {
char *substr= strsub(str,s,l);
substr= sort(substr);
if(m=='D')
substr= strrev(substr);
for(int i=0;i<l;i++)
str[i+s-1]= substr[i];
return str;
}
char
*execFunction(char *str,char *function) {
if(strstr(function,"LS")!=NULL)
return
leftShift(str,atoi(strsub(function,4,strlen(function)-3)));
if(strstr(function,"RS")!=NULL)
return
rightShift(str,atoi(strsub(function,4,strlen(function)-3)));
if(strstr(function,"LC")!=NULL)
return
leftCirc(str,atoi(strsub(function,4,strlen(function)-3)));
if(strstr(function,"RC")!=NULL)
return rightCirc(str,atoi(strsub(function,4,strlen(function)-3)));
if(strstr(function,"MC")!=NULL)
return
subCirc(str,function[3]-48,function[4]-48,function[5]-48,function[6]);
if(strstr(function,"REV")!=NULL)
return
revStr(str,function[4]-48,function[5]-48);
if(strstr(function,"SWAP")!=NULL)
return
swapStr(str,function[5]-48,function[6]-48,function[7]-48);
if(strstr(function,"SORT")!=NULL)
return
sortStr(str,function[5]-48,function[6]-48,function[7]);
return "ERROR";
}
void
main() {
clrscr();
for(int i=0;i<5;i++) {
char *inputstr;
cout<<
"String: ";
cin.getline(inputstr,100);
char *functions[20];
int pos= 0,lastpos=
1,numfunct= 0;
while(inputstr[pos]!=0)
{
if(inputstr[pos]=='/')
{
functions[numfunct]=
strsub(inputstr,lastpos,pos-lastpos+1);
numfunct++;
lastpos=
pos+2;
}
pos++;
}c
char *str=
strsub(inputstr,lastpos,pos-lastpos+1);
for(int
i=0;i<numfunct;i++)
str=
execFunction(str,functions[i]);
cout<< str <<
endl;
getch();
}
}