字符串操作

strlen:
//不包含'\0'
//unsigned long Strlen(const char *str)
//{
//    unsigned long length=0;
//    while (*str++!='\0') {
//       length++;
//    }
//    return length;
//}
unsigned long Strlen(const char *str){
    unsigned long length=0;
    for (; *str++!='\0'; length++) {}
    return length;
}
strcpy:
//char * Strcpy(char *str1,const char *str2)
//{
//    char *str=str1;
//    while ((*str++ = *str2++) != '\0');
//    return str1;
//}
char * Strcpy(char *str1,const char *str2){
    char *str=str1;
    for (; (*str++ = *str2++) != '\0'; ) {}
    return str1;
}
strcat:
//char * Strcat(char *str1,const char *str2)
//{
//    char *str=str1+strlen(str1);
//    while ((*str++ = *str2++) != '\0');
//    return str1;
//}
char * Strcat(char *str1,const char *str2){
    char *str=str1+strlen(str1);
    for (; (*str++ = *str2++) != '\0'; ) {}
    return str1;
}
strcmp:
//返回第一个不同字符的ASCII值的差
int Strcmp(const char *str1,const char *str2){
    for(;(*str1==*str2) && *str1!='\0';str1++,str2++);
    return (int)(*str1-*str2);
}
字符串逆序:
char * Resverse(char *str1,const char *str2){
    char *str=str1;
    int length=(int)strlen(str2)-1;
    str2+=length;
    for (int i=length; i>=0; i--) {
        *str++ = *str2--;
    }
    *str='\0';
    return str1;
}   
判断字符串是否回文:
void huiwen(const char *str){
    int length=(int)strlen(str)-1;
    const char *str1=str,*str2=str;
    str2=str2+length;
    char *flag="Yes";
    for (int i=1; i<=length/2; i++) {
        if (*str1++ != *str2--) {
            flag="No";
        }
    }
    printf("%s\n",flag);
}
判断父串中子串的个数:
void count(const char *str1,const char *str2){
    int n=0;
    for (;*str1 != '\0';str1++) {
        if(*str1 == *str2){
            const char *pt=str1,*str=str2;
            int flag=1;
            for (;*str !='\0'; pt++,str++) {
                if (*pt != *str){
                    flag=0;
                    break;
                }
            }
            if (flag==1) n++;
        }
    }
    printf("%d\n",n);
}
求最长连续字符串:
void lstr(char *str1,const char* str2){
    const char *str=str2;
    int _count=0;
    while(*str2!='\0'){
        int i=0;
        for(i=0;*str+i==*str2;i++){
            str2++;
        }
        str=str+i;
        if(_count<i){
            str1=str1-_count;
            _count=i;
            for(int j=_count;j>0;j--){
                *str1=*(str-j);
                str1++;
            }
        }
    }
    *str1='\0';
}
#include <stdio.h>
int main(int argc, const char * argv[]) {
    //Reverse
    printf("%s\n",Resverse(str, "123456789"));

    huiwen("123321");

    count("1231112312312333123123", "123");

    lstr(str,"123456789abcdefghijk");
    printf("%s\n",str);

    return 0;
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值