注册 登录
编程论坛 C++教室

看看这道题啊,好难啊!!

fanfan320 发布于 2010-05-24 14:51, 726 次点击
编写一个函数,作用是把一个char组成的字符串循环右移N个。比如原来是“abcdefghi”,如果N=2,移位后是“hiabcdefg”.
8 回复
#2
lscalin2010-05-24 16:06
给个笨法子,设置两个字符串,N是几,就把前几个放一个字串里,后几个放另一个字串里,然后把后一个字串放前面,两个再合并不就行了
瞎弄了一个,不过用的是string ,不是char,对不对不要笑话呀  
程序代码:
#include <string>
#include <iostream>
int main( )
{
   using namespace std;
   string  str1 ("abcdefghijklmn");
   cout << "The original string str1 is: \n " << str1
        << endl << endl;


 
   int n;
   cin >> n;

   basic_string <char> str2 = str1.substr ( 0 , str1.size()-n );
   cout << "The substring str1 copied is: " << str2
        << endl << endl;
   basic_string <char> str3= str1.substr (str1.size()-n );
   cout << "The substring str1 copied is :" << str3
    << endl << endl;
   string str4;
   str4 = str3 + str2;
   cout << "New str:" << str4 <<endl;

 
  


   system("pause");
}



[ 本帖最后由 lscalin 于 2010-5-24 18:11 编辑 ]
#3
yjj6340419262010-05-24 17:29
用两个数组试试。。。。
#4
fanfan3202010-05-24 18:23
回复 2楼 lscalin
我用的是C++6.0,不能编译过啊
#5
ciweitou1632010-05-24 19:53
2楼的方法不错,我这里也献丑了。
程序代码:

#include<iostream>
using namespace std;

int main(void)
{
    int i;
    char a[]={'a','b','c','d','e','f','g'};
    char b[]={};
    cout<<"源数组:"<<endl;
    for(int i=0;i<7;i++)
        cout<<a[i]<<"\t";
    cout<<endl;
    char flag;
    cout<<"你想左移还是右移?"<<endl;
    cout<<"左移输入'<',右移输入'>'"<<endl;
    cin>>flag;
    cout<<"你想移动的位数"<<endl;
    cin>>i;
    if('<'==flag)
        for(int j=0;j<7;j++)
            b[j]=a[(j+i)%7];
    else
        for(int j=0;j<7;j++)
            b[j]=a[(j+7-i)%7];
    cout<<"移动后的数组"<<endl;
    for(int i=0;i<7;i++)
        cout<<b[i]<<"\t";
    return 0;
}

今天太晚了,有不明白的,我明天给注释吧!我要马上回去了。

[ 本帖最后由 ciweitou163 于 2010-5-24 19:54 编辑 ]
#6
最近不在2010-05-24 21:42
// Note:Your choice is C++ IDE#include <iostream>using namespace std;const int size = 20;  //定义数组大小int main()     {    char a[size];         char b[size];        //用于存储转换后的字符串            while(1)      //用于反复执行    {        cout<<"请输入一个字符串:";        cin>>a;        int len = strlen(a);    //求取字符串的长度                int n;        cout<<"请输入N值:";        cin>>n;        while(n > len)        {            cout<<"输入过大,请重新输入:";            cin>>n;        }                int n;        cout<<"请输入N值:";        cin>>n;        while(n > len)        {            cout<<"输入过大,请重新输入:";            cin>>n;        }                for(int i = 0; i < len; i++)        {            if(i < n)            {                b[i] = a[len-n+i];    //前n个            }            if(i >= n)        <span class="Apple-tab-span" style="white
#7
最近不在2010-05-24 21:53
程序代码:
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
const int size = 20;  //定义数组大小,方便修改
int main()   
{
    char a[size];   
    char b[size];        //用于存储转换后的字符串   
   
    while(1)      //用于反复执行
    {
        cout<<"请输入一个字符串:";
        cin>>a;
        int len = strlen(a);    //求取字符串的长度
      
        int n;
        cout<<"请输入N值:";
        cin>>n;
        while(n > len)
        {
            cout<<"输入过大,请重新输入:";
            cin>>n;
        }
      
        for(int i = 0; i < len; i++)
        {
            if(i < n)
            {
                b[i] = a[len-n+i];    //前n个
            }
            if(i >= n)
            {
                b[i] = a[i-n];   //n个以后
            }
        }
        b[len] = '\0';   //不要忘记字符串结尾的'\0',标记字符串的结束
      
        cout<<"排列后的字符串:";
        cout<<b<<endl;
    }
    return 0;
}
用到了另一个数组存取新的字符串,也用到了字符串的赋值这一知识点。刚才悲剧了,死也点不开贴代码的工具窗口...
#8
fanfan3202010-05-25 11:32
有这么多大侠来帮忙,小弟真的很感谢,其实我一直是在想,如何用strcpy函数来实现,不知道大家有没兴趣?
#9
lscalin2010-05-25 14:47
用STRCPY跟我那个差不多,用STRLEN取长度
1