android复习路之字符串的处理

常见的字符串转换的处理方法:

1.字符串2是否可以通过字符串1旋转得到,例:字符串1:123456,字符串2:234561,字符串2就是字符串1通过旋转得到。字符串1:123456,字符串2:134561,字符串2不可以通过字符串1旋转得到。

解题方法:利用KMP算法,时间复杂度为O(N)

首先判断字符串2的长度是是否和字符串1的长度相等。如果相等,然后开一个大小为字符串1的两倍的数组,内容为字符串1+字符串1。例:字符串1为1234,则新的字符串为12341234。用kmp比较算法进行截取比较,字符串2一定是大字符串的子集。

#include<stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

    char a[100],b[100],c[100],d[100];

    int Length,Length1,i,flag=0;

    gets(a);//接收给的定的字符串1和字符串2

    gets(c);

    strcat(b,a);//开一个大小为2倍字符串1的数组

    strcat(b,a);

    Length=strlen(a);//分别求字符串1和字符串2的长度

    Length1=strlen(c);

    if (Length==Length1) {//比较长度是否相等

        for (i=0; i<Length1; i++) {//进行大字符串的截取遍历查看是否在大字符串中存在字符串2这个字串

            strncpy(d,b+i ,Length1 );

            if(strcmp(d, c))//如果找到输出yes跳出循环

            {

                printf("yes");

                flag=1;

                break;

            }

        }

    }

    else{

        printf("No");

        flag=1;

    }

    if (flag==0) {

        printf("No");

    }

}

2.字符串逆序问题,将一个句子进行逆序处理,i love you,逆序处理为 you love i。处理思路自定义一个任意字符串逆转函数,逆转规则将字符串以最中间的字符为中间对字符串进行对调,例: i love you对调后为  uoy evol i 然后分割子串将每个单词再次进行对调,最后得到的就是我们需要的。

#include <stdio.h>

#include <string.h>

void fun(char a[])  //字符串逆序函数

{

    int length,i;

    char temp;

    length=strlen(a);//求的字符串的整体长度

    for (i=0; i<length/2; i++) {//遍历字符串的前一半,以中间元素为中点对对数组元素进行对调

        temp=a[i];

        a[i]=a[length-i-1];

        a[length-i-1]=temp;

    }

}

int main() {

    // insert code here...

    char a[1000],b[100];

    int i,length,j=0;

    gets(a);

    fun(a);

    length=strlen(a);

    for (i=0; i<length;i++ ) {//以空格为划分依据,分别对每个单独的字符串进行后续处理

        if(a[i]==' '){

            fun(b);

            printf("%s ",b);

            strcpy(b, " ");

            j=0;

        }

        else{

            b[j]=a[i];

            j++;

        }

    }

    fun(b);

    printf("%s\n",b);

    return 0;

}

3.字符串按照指定位置进行翻转问题,例:字符串ABCDE,在i=2的位置将字符翻转,结果位DEABC。实现方法还是一样的定义一个任意位置的字符串逆序函数,按照给定条件进行子串分割,先将子串进行逆序处理,然后再将整体的字符串进行逆序处理,就是我们想要的结果了。过程演示:先进行子串置逆,结果为CBA和ED,然后整体置逆结果为:DEABC。这就是就是我们想要的结果了,代码跟上面是完全类似的就不贴了。
4.将两个字符串拼接成一个大的字符串,并且是大的字符串的字典序最小,解法是比较不同拼接方法形成的大字符串的字典序,输出最小的內一个,而不是判读单独的子串的字典序最小将它放到最前面,这样的虽然子串最小,但不一定是大串整体最小。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值