字符串

作者: 逍遥_9353 | 来源:发表于2018-04-27 09:42 被阅读49次

    /*

    字符串的旋转

    给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部。例如,将字符串

    "abcdef"的前3个字符'a','b','c'移到字符串的尾部,那么原字符串将变成'defabc',

    请写一个函数实现此功能。

    */

    /*

    思路:

        定义一组字符串,调用两个函数,一个将一个字符移到末尾,

    另一个调用若干次使得需要移到的若干个字符移动到字符串

    尾部。

    */ 

    #include<iostream>

    #include<string>

    using namespace std;

    void LeftShifOne(string &s,int n)//调用函数将一个字符移到尾部

    {

    char t=s[0];//保存首字符

    for(int i=1;i<n;i++)

      s[i-1]=s[i];

      s[n-1]=t;

    }

    void LeftRotatestring(string &s,int n,int m)//调用函数m次,使得m个字符移到字符串尾部

    {

    while(m--)

    {

    LeftShifOne(s,n);

    }

    cout<<s<<endl;

    }

    int main()

    {

        string s;//定义字符串

        int  n,m;//定义字符串的长度,移动的长度

    cin>>s>>m;

    n=s.length();//字符串的长度

        LeftRotatestring(s,n,m);//调用函数

    return  0;

    /*

    最大连续乘积子数组

        给定一个浮点数组,任意取出数组中的若干个连续的数相乘,

    请找出其中乘积最大的子数组的积。例如,给定数组{-2.5,4,

    0,3,0.5,8,-1},则取出的最大乘积子数组为{3,0.5,8},那么最大的乘积为12.

    */

    /*

    思路:

        问题可以简化为:在数组中找到一个子数组,使得它的乘积最

    大,同时再找到另一个子数组,使得它的乘积最小(含有负数情

    况),也就是说不但需要记录最大乘积也需要记录最小乘积。

    */ 

    #include<iostream>

    using namespace std;

    double  maxstring(double *s,int length)

    {

        double maxend=s[0];

        double minend=s[0];

        double maxresult=s[0];

    for(int i=1;i<length;i++)

    {

      double end1=maxend*s[i],end2=minend*s[i];

      maxend=max(max(end1,end2),s[i]);

      minend=min(min(end1,end2),s[i]);

      maxresult=max(maxresult,maxend);

    }

    return maxresult;

    }

    int main()

    {

    double s[100],length;

    cin>>length;

    for(int i=0;i<length;i++)

    cin>>s[i];

    cout<<maxstring(s,length)<<endl;

    return 0;

    }

    /*

    字符串的查找

        假设现在有这样一个问题:有一个文本串S和一个模式串P,

    要查找P在S中的位置(第一个字符的位置)

    */

    /*

    思路:

        定义两组一维数组,如果当前字符匹配成功,则继续匹配下

    一个字符;如果匹配失败则一个回溯,一个被置为0.倘若所

    有都匹配成功则返回最初第一个字符位置,否则则返回-1.

    */

    #include<iostream>

    #include<string>

    using namespace std;

    int main()

    {

        string a,b;

        int i,j;

        cin>>a>>b;

    while(i<a.length() && j<b.length() )

    {

    if(a[i]==b[j])

    {

    i++;

    j++;

    }

    else

    {

    i=i-j+1;

    j=0;

    }

    }

    if(j==b.size())

    cout<<i-j<<endl;

    else

    cout<<-1<<endl; 

    return 0;

    }

    相关文章

      网友评论

      本文标题:字符串

      本文链接:https://www.haomeiwen.com/subject/kuxblftx.html