一些算法

//求目标串中最长有序子串

#include <stdio.h>
#include <stdlib.h>

void findLongestStr(char* str, size_t size)

{

     int leng = 1, count = 0;

     char* tp = str;

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

     {

             if(str[i] < str[i+1])

                count++;

             else if(count+1 > leng)

             {

                  tp = &str[i-count];

                  leng = count+1;

                  count = 0;

             }            

     }

     if(leng > 1)

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

             {

                     printf("%c/t",*tp);

                     tp++;

             }

     else

          printf("have not find the substring");

}

int main()

{

    char a1[] = {'a','1','2','5','a','b','c','x','y','z'};

    findLongestStr(a1, sizeof(a1)/sizeof(a1[0]));

    printf("/n");

    char a2[] = {'a','1','2','5','a','1','c','x','y','z'};    

    findLongestStr(a2, sizeof(a2)/sizeof(a2[0]));

    printf("/n");

    char a3[] = {'a','1','2','5','a','b','c','x','y','1'};

    findLongestStr(a3, sizeof(a3)/sizeof(a3[0]));

    printf("/n");

    char a4[] = {'a','1','2','5','a','b','1','x','y','z'};

    findLongestStr(a4, sizeof(a4)/sizeof(a4[0]));

    printf("/n");

    char a5[] = {'z'};

    findLongestStr(a5, sizeof(a5)/sizeof(a5[0]));

    printf("/n");

    char a6[] = {};

    findLongestStr(a6, sizeof(a6)/sizeof(a6[0]));

    printf("/n");

    system("pause");

    return 0 ;  

}

 

 

//将目标串中空格归一

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* clean_space(char *src,int size) 

    char *save = (char*)malloc(sizeof(char)*size);

    strcpy(save,src);
    char *dst,*ret;
    ret = save;
    dst = save;
     
    while (*save != 0x00) 

        if (*save != ' ') 

            if (dst != save) 

                if (*(save-1) == ' ') 
                    *dst++ = ' '; 
                *dst++ = *save; 
            } else 
                dst++; 
        } 
        save++; 
    } 
    *dst++ = '/0';

system("pause");  
 
return ret;

//x&(x-1)的用法

#include <stdio.h>
#include <stdlib.h>

 

int func(int x)
{
    int countx = 0;
    while(x)
    {
          countx ++;
          x = x&(x-1);
          printf("%d/n",x);
     }
    return countx;
}


int main(){
   
    int i=func(9999);
   
    printf("%d/n",i);
   
    system("pause");
   
    return 0;
   
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值