题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
第一种解法:
string LeftRotateString(string str, int n){
if(str.size() == 0){
return str;
}
int size = str.size();
if(n > size){//若n大于数组的长度,则对数组的长度取余
n = n % size;
}
string str1(str,0,n);//求出从0开始,长度为n的子串
string str2(str,n,size-n);
return str2 + str1;
}
第二种解法:
string ReverseSentence(string str){
if(str.empty() || str[0] == ' '){//判空和判断只有一个空格
return str;
}
char ch[str.size()];
strcpy(ch,str.c_str());
char delims[] = " ";
char* result = NULL;
result = strtok(ch,delims);//分割字符串
string ret = "";
while(result !=NULL){
string s(result);
ret = " " + s + ret;
result = strtok(NULL,delims);//之后第一个参数为NULL
}
ret.erase(0,1);//消除第一个多加的空格
return ret;
}