简单的字符串算法

1、标准库函数
int strlen(char* s) {
    if(s==NULL) return 0;
    int len=0;
    while(str[++len]!='\0');
    return len;
}  
                  
char strcpy(char* str1,const char* str2) {
    if(str1==str2) return str1;
    assert((str1!=NULL) && (str2!=NULL));
    char *addr=str1;
    while(*str1++=*str2++);
    return addr;
}    
                   
//if      str1 == str2 return 0;
//else if str1 <  str2 return negative number
//else                 return positive number
int strcmp(const char *str1,const char* str2) {
    while(*str1++ == *str2) {
        if(*str2++ == 0) return 0;
    }
    return (*--str1 - *str2);
}
2、逆转字符串其改进常应用在判断是否回文数、大数的运算等。
void reverse_str(char *str,int beg,int ed) {
    int i,j;
    for(i=beg,j=ed-1;i<j;i++,j--) {
        swap(str[i],str[j]);
    }
}
3、左旋字符串
左旋的定义:将前面k个字符放到字符串的末尾,比如 'abcdef'左旋两位变为'cdefab'.
如下变换即可,易证时间复杂度为O(n)
                   abcdef   -> ba | cdef -> ba | fedc -> cdefab

void left_rotate(char *str,int k,int n) {
    reverse_str(str,0,k);
    reverse_str(str,k,n);
    reverse_str(str,0,n);
}
4.输出字符串的所有排列
void permutation(char *str,int beg,int ed) {
    int i;
    if(beg==ed-1) {
        for(i=0;i<ed;i++) 
            cout<<str[i]<<" ";
        cout<<endl;
    }
    for(i=beg;i<ed;i++) {
        swap(str[beg],str[i]);
        permutation(str,beg+1,ed);
        swap(str[beg],str[i]);
    }
}



















                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值