zoukankan      html  css  js  c++  java
  • 关于字符串的一些算法

    代码
    // programmer_string_test.cpp : 定义控制台应用程序的入口点。
    //

    #include 
    "stdafx.h"
    #include 
    "stdio.h"
    #include 
    <iostream>
    #include 
    "assert.h"
    #include 
    <string>
    using namespace std;
    #define MAX 50

    /*不用itoa函数,将整数转化成字符串数*/
    void itoa_test()
    {
        
    int num,i,j=0;
        
    char a[MAX],b[MAX];
        cout 
    << "please input a interger:" << endl;
        cin 
    >> num;
        
    while(num)
        {
            i
    =num%10;
            a[j]
    =i+'0';
            j
    ++;
            num
    /=10;
        };
        a[j]
    ='\0';
        cout 
    << "the inverted string is : " << a << endl;
        
        
    //求出来的a是倒转的,现将其再转回去
        for(j=0;j<strlen(a);j++)
        {
            b[j]
    =a[strlen(a)-j-1];
        }
        b[j]
    ='\0';

        cout 
    << " the converted string is :" << endl
            
    << b << endl;
    }

    /* 不用atoi函数,将字符串转换成整数*/
    void atoi_test()
    {
        cout 
    << " atoi_test: " << endl;
        
    char a[MAX];
        
    int i,num=0,len;
        cout 
    << "please input a num string: " << endl;
        cin.getline(a,MAX);
        len
    =strlen(a);
        
    for(i=0;i<len;i++)
        {
            num
    =num*10+a[i]-'0';
        }

        cout 
    << " the convered number is " << num << endl;
    }

    /* strcpy test */
    char * strcpy_fun(char *dest, char *src)
    {
        
    int i,len;
        len
    =strlen(src);
        cout 
    <<" the len of src is " << len << endl;
        
    for(i=0;i<len;i++)
            
    *dest++=*src++;
        cout 
    << " i is " << i <<endl;
        dest[i]
    ='\0';
        
    char c;
        
    for(i=0;i<5;i++)
        {
            c
    =dest[i];
            cout 
    << c << endl;
        }
        
    return dest;
    }

    char *strcpy_answer(char *dest, const char *src)
    {
        assert((dest
    !=NULL) && (src !=NULL));
        
    char *address=dest;
        
    while((*dest++=*src++)!='\0');
        
    return address;
    }

    void strcpy_test()
    {
        cout 
    << "strcpy_test: " << endl;
        
    char dest[5],dest1[5],src[5]="hi";
        strcpy_fun(dest,src);
        strcpy_answer(dest1,src);
        
        cout 
    <<" the dest string is " << dest << endl;
        cout 
    <<" the programmer answer is : "<< dest1 <<endl;
    }


    char *string_shift_fun(char *str, int steps)
    {
        
    char tmp[MAX];
        
    int len,i;
        len
    =strlen(str);
        
    for(i=0;i<steps;i++)
            tmp[i]
    =str[len-steps+i];
        
    for(i=0;i<(len-steps);i++)
            tmp[steps
    +i]=str[i];
        tmp[len]
    ='\0';
        strcpy(str,tmp);
        cout 
    << "the tmp is :" <<tmp << endl;
        
    return str;
    }

    void string_shift_answer(char *pStr,int steps)
    {
        
    int n=strlen(pStr)-steps;
        
    char tmp[MAX];
        memcpy(tmp,pStr
    +n,steps);
        memcpy(tmp
    +steps,pStr,n);
        memcpy(pStr,tmp,strlen(pStr));
    }

    void string_shift_test()
    {
        
    /*
        cout << "string_shift_test:" << endl;
        char str[MAX],*str1;
        cin.getline(str,10);
        
    */
        
    char str[]="hello",*str1;
        str1
    =string_shift_fun(str,2);
        
        cout 
    << "the shifted string is:"<< str1 << endl;

        string_shift_answer(str,
    2);
        cout 
    << "shifted angain:the shifted string of programer answer is :" << str << endl;
    }


    //找出字符串中出现的相同且长度最长的字符串,输出它的及其首字符的位置
    int longest_same_string_answer()
    {
        
    string str,tep;
        cout 
    << "please input string :" << endl;
        cin 
    >> str;

        
    for(int i=str.length()-1;i>1;i--)
            
    for(int j=0;j<str.length();j++)
                
    if(j+i<=str.length())
                {
                    size_t t
    =0;
                    size_t num
    =0;
                    tep
    =str.substr(j,i);
                    t
    =str.find(tep);
                    num
    =str.rfind(tep);
                    
    if(t!=num)
                    {
                        cout 
    << tep << " " << t+1 <<endl;
                        
    return 0;
                    }
                }
        
    return 0;
    }

    //返回主串中字符字串以后的所有字符
    int substr_afterstr_fun(char *str,char *substr)
    {
        
    int len,sublen,i=0,j=0;
        len
    =strlen(str);
        sublen
    =strlen(substr);

        
    while(i<len&&j<sublen)
        {
                
    if(str[i]==substr[j])
                {
                    i
    ++;
                    j
    ++;
                }
                
    else
                {
                    i
    =i-j+1;
                    j
    =0;
                }
        }
        
    if(j>=sublen)
            
    return (i-sublen);
    }
        
    void substr_afterstr()
    {
        
    char str[]="hellostrhaha",substr[]="str";
        
    int pos;
        pos
    =substr_afterstr_fun(str,substr);
        cout 
    << "the string begin with the sub string is :" << str+pos << endl;

    }


    //将一句话里的单词倒转,标点符号不倒转
    void invert_fun(char *str)
    {
        
    int len ,i;
        
    char tmp[MAX];
        len
    =strlen(str);
        
    for(i=0;i<len;i++)
            tmp[i]
    =str[len-1-i];
        tmp[len]
    ='\0';
        strcpy(str,tmp);
    }

    void invert_word()
    {
        
    char str[]="I come from tianjin.",tmp[MAX],word[MAX];
        
    int len,i=0,j=0,k,m;
        len
    =strlen(str);
        invert_fun(str);

        cout 
    << "the totally invert string is:"<< str << endl;


        
    while(i<len)
        {
            word[j
    ++]=str[i++];
            
    if(str[i]==' ')
            {
                word[j]
    ='\0';
                invert_fun(word);
                
    for(k=0;k<strlen(word);k++)
                    str[i
    -j+k]=word[k];
                j
    =0;
                i
    ++;
            }
        }

        cout 
    << "the invert string is :" << str << endl;
    }


    int _tmain(int argc, _TCHAR* argv[])
    {
        
    //write a user defined function about itoa
        
    //itoa_test();
        
        
    //
        
    //atoi_test();

        
    //
        
    //strcpy_test();
        
        
    //
        
    //string_shift_test();

        
    //
        
    //longest_same_string_answer();
        
        
    //
        
    //substr_afterstr();

        
    //
        invert_word();
        
    while(1);
        
    return 0;
    }

  • 相关阅读:
    Fedora下使用minicom及USB串口线
    fedora装机后要运行的脚本(原创)
    终极 Shell
    深入学习 Git 工作流
    如何使用Git上传项目代码到github
    Fedora23 chrome 安装
    Fedora下安装deb包方法
    vim自动缩进设置
    Fedora 20 安装搜狗拼音输入法
    C语言stat()函数:获取文件状态
  • 原文地址:https://www.cnblogs.com/newgreen/p/1853687.html
Copyright © 2011-2022 走看看