常见的字符串转换的处理方法:
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;
}