码迷,mamicode.com
首页 > 编程语言 > 详细

C语言:判断一个字符串是不是另一个字符串的旋转字符串

时间:2015-09-14 00:46:26      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:c语言;字符旋转;

例如:给定s1 = AABCD和s2 = BCDAA,返回1,

给定s1=abcd和s2=ACBD,返回0. 

AABCD左旋一个字符得到ABCDA 

AABCD左旋两个字符得到BCDAA 

AABCD右旋一个字符得到DAABC 

AABCD右旋两个字符得到CDAAB


分析题目之后我们发现,一个字符串有左旋转和右旋转两种。左旋转之后的字符串在原字符串拼接后的新字符串中;右旋转之后的字符串拼接之后可以找到源字符串。


这里我们会使用两个库函数strncat和strstr,关于两个函数的定义请自己查找。


字符串查找部分:

void circle(char *dest, const char *src){      
	assert(dest);
	assert(src);
	strncat(dest,dest, strlen(dest));   //被查找的字符串拼接
	if (NULL == strstr(dest, src)){      //查找字符串,找到返回第一次出现的地址
		return 0;                    //否则返回NULL
	}	
	else
		return 1;
}

完整代码:


#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<assert.h>

#include<string.h>


void circle(char *dest, const char *src){      

assert(dest);

assert(src);

strncat(dest,dest, strlen(dest));

if (NULL == strstr(dest, src)){

printf("不是旋转字符串\n");

}

else

printf("是旋转字符串\n");

}


int main(){

char arr[13] = "abdgef";          //测试左旋转

char brr[] = "dgefab";

char crr[13] = "efabdg";           //测试右旋转

char drr[] = "abdgef";

char err[] = "addgef";            //测试找不到

circle(arr,brr);

circle(crr, drr);

circle(arr, err);

return 0;

}


本文出自 “moLova” 博客,请务必保留此出处http://molova.blog.51cto.com/10594266/1694314

C语言:判断一个字符串是不是另一个字符串的旋转字符串

标签:c语言;字符旋转;

原文地址:http://molova.blog.51cto.com/10594266/1694314

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!