请教数据移位的问题

chen7788 2010-12-02 11:23:52

char ch = "ABCD";
//如何移动成
ch = "DABC"; //第一步
ch = "DCAB"; //第二步
ch = "DCBA"; //第三步

搞不明白在C++中怎么移

效果是输入 ABCD
输出 DCBA

字符交换的已经实现了,现在想试试这样该怎么实现? C++新手上路~~~`

也可以用其他的数据类型 如:

int ch = 1234;
//如何移动成
ch = 4123; //第一步
ch = 4312; //第二步
ch = 4321; //第三步


也可以按照自己的思路实现,思路越多越好!!!
...全文
142 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jace3010 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 chen7788 的回复:]

效果是输入 ABCD
输出 DCBA

[/Quote]
左右对称交换即可。
Jace3010 2010-12-02
  • 打赏
  • 举报
回复
char ch[] = "ABCD";
比较笨的一个方法:
第一步: 四个字符循环右移一位
第二步: 右边三个字符循环右移一位
第三步: 右边两个字符循环右移一位
Zeilone 2010-12-02
  • 打赏
  • 举报
回复
必须要经过第一、第二步吗?
如果只是要个结果,那就是反转字符串而已
wyfwx 2010-12-02
  • 打赏
  • 举报
回复
char ch = "ABCD";
//如何移动成
ch = "DABC"; //第一步
ch = "DCAB"; //第二步
ch = "DCBA"; //第三步


错误的符值


char ch[] = "ABCD";还差不多
Csuxiaowu 2010-12-02
  • 打赏
  • 举报
回复
#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;
}

翻出来的 很久了 自己慢慢看
射下北极星 2010-12-02
  • 打赏
  • 举报
回复
这个不是循环右移厶?
赵4老师 2010-12-02
  • 打赏
  • 举报
回复
strrev
chen7788 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jace3010 的回复:]
引用楼主 chen7788 的回复:

效果是输入 ABCD
输出 DCBA


左右对称交换即可。
[/Quote]

字符交换的已经实现了,现在想试试这样该怎么实现?

char ch[] = "ABCD";
比较笨的一个方法:
第一步: 四个字符循环右移一位
第二步: 右边三个字符循环右移一位
第三步: 右边两个字符循环右移一位

问题就是不知道怎么移嘛 (⊙_⊙)?
chen7788 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 boxban 的回复:]
前面程序的输出结果:
0:ABCDEFGHIJK
... ...
[/Quote]

有没有简单一点的,最好是函数里面没有参数的,也不要递归
小弟我太菜了,刚入门····
boxban 2010-12-02
  • 打赏
  • 举报
回复
前面程序的输出结果:
0:ABCDEFGHIJK
1:KABCDEFGHIJ
2:KJABCDEFGHI
3:KJIABCDEFGH
4:KJIHABCDEFG
5:KJIHGABCDEF
6:KJIHGFABCDE
7:KJIHGFEABCD
8:KJIHGFEDABC
9:KJIHGFEDCAB
0:KJIHGFEDCBA
libinfei8848 2010-12-02
  • 打赏
  • 举报
回复
vector<char> vctChar;
vctChar.reserve()
boxban 2010-12-02
  • 打赏
  • 举报
回复

#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;
}

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧