64,636
社区成员
发帖
与我相关
我的任务
分享
char ch = "ABCD";
//如何移动成
ch = "DABC"; //第一步
ch = "DCAB"; //第二步
ch = "DCBA"; //第三步
int ch = 1234;
//如何移动成
ch = 4123; //第一步
ch = 4312; //第二步
ch = 4321; //第三步
#include <iostream>
#include <stack>
#include <string>
#include <cstring>
using namespace std;
char *movetoright(char *str,int ilength)
{
char *ret = new char[strlen(str)+1];
ilength = ilength%strlen(str);
if(str == NULL || ilength == 0)
return str;
char *p = str;
int i = 0;
p = p + strlen(str) - ilength;
while(*p != '\0')
{
ret[i++] = *p;
p++;
}
p = str;
while(p != (str + strlen(str) - ilength))
{
ret[i++] = *p;
p++;
}
ret[strlen(str)+1] = '\0';
return ret;
}
string GetIt(char *str,int ilength)
{
string strsource = str;
ilength = ilength%strlen(str);
string firstpart = strsource.substr(0, strlen(str) - ilength);
stack<char> m_stack;
string secondpart = strsource.substr(strlen(str)-ilength,strsource.size()-strlen(str)+ilength);
while( !secondpart.empty())
{
m_stack.push(secondpart.at(secondpart.size()-1));
secondpart.erase(secondpart.end()-1);//删除的时候用迭代器比较好的.end()是最后一个的下一个 需要减去1
}
while(!m_stack.empty())
{
secondpart += m_stack.top();
m_stack.pop();
}
strsource = "";
strsource = secondpart + firstpart;
return strsource;
}
int main()
{
char p[] = "abcd123";
cout << movetoright(p,1) <<endl;
cout << GetIt(p,100) <<endl;
return 0;
}
#include <stdio.h>
int g_round = 0; //记录轮次
void shift(const char* o, char* s, int len)
{
if(--len == 0) return;
char c = s[len];
for(int i = len; i > 0; --i){
s[i] = s[i-1];
}
s[0] = c;
printf("%2d:%s\n", g_round++, o);
shift(o, s+1, len);
}
int main()
{
char str[] = "ABCDEFGHIJK";
printf("%2d:%s\n", g_round++, str);
shift(str, str, sizeof(str)-1);
return 0;
}