C语言——-字符串旋转结果

导读:本篇文章讲解 C语言——-字符串旋转结果,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

题目内容

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

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

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

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

题目解析

方法一:每旋转一个字符,就判断是否和输入的字符串相等。

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

int stringrotation(char* str1, char* str2)
{
	assert(str1 != NULL);
	assert(str2 != NULL);
	if (strlen(str1) != strlen(str2))//长度不一样就不是
	{
		return -1;
	}
	if (strcmp(str1, str2) == 0)//如果输入的字符串和原字符串相同就等于零
	{
		return 1;
	}
	int len = strlen(str1);
	int i = 0;
	int j = 0;
	while (i < len)//旋转的次数进行n-1次
	{
		
		char tmp = *str1;
		for (j = 0; j < len - 1; j++)
		{
			*(str1 + j) = *(str1 + j + 1);
		}
		*(str1 + len - 1) = tmp;
		//判断
		if (strcmp(str1, str2) == 0)
		{
			return 1;
		}
		i++;
	}
	return -1;
}
int main()
{
	char arr1[100] = "ABCDEFG";
	char arr2[50] = "";
	scanf("%s", arr2);
	int ret = stringrptation(arr1, arr2);
	if (ret == 1)
	{
		printf("YES\n");
	}
	else
	{
		printf("NO\n");
	}
	return 0;
}

方法二:将原字符串再来一遍接在后面,然后找一找待查找的字符串是不是两倍原字符串的子集即可。

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

int stringrotation(const char* arr1, char* arr2)
{
	char tmp[256] = { 0 }; //用一个辅助空间将原字符串做成两倍原字符串
	strcpy(tmp, arr1); //先拷贝一遍
	strcat(tmp, arr1);//再连接一遍
	return strstr(tmp, arr2) != NULL;//看看找不找得到
}

int main()
{
	char arr1[100] = "ABCDEF";
	char arr2[50] = "";
	scanf("%s", arr2);
	int ret = stringrotation(arr1, arr2);
	if (ret == 1)
	{
		printf("YES\n");
	}

 

两种方法中对一些函数进行了使用,防止小伙伴们对这些函数用法忘记,所以帮大家整理了一下。


1. assert() 断言函数,用于在调试过程中捕捉程序错误

    void assert (int expression);

参数  expression     头文件 #include<assert.h>

要检测的表达式。如果表达式的值为 0,那么断言失败,程序终止执行;如果表达式的值为非 0,那么断言成功,assert() 不进行任何操作。


2.strlen()函数,返回字符串的长度

    unsigned int strlen (char *s);

参数 s 为指定的字符串    头文件 #include<string.h>

strlen()用来计算指定的字符串s 的长度,不包括结束字符”\0″。

返回值,返回字符串s 的字符数。


3.strcmp()函数,比较字符串(区分大小写)

   int strcmp(const char *s1, const char *s2);

参数 s1, s2 为需要比较的两个字符串   头文件#<string.h>

返回值,若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。


4.strcpy()函数,字符串复制(拷贝)

  char *strcpy(char *dest, const char *src)

参数 dest–指向用于存储复制内容的目标数组。src–要复制的字符串。

头文件 #include<stdlib>

返回值,该函数返回一个指向最终的目标字符串 dest 的指针。


5.strcat()函数,连接字符串

 char *strcat(char *dest, const char *src)

参数 dest 为目的字符串指针,src 为源字符串指针   头文件:#include <string.h>

返回值, 该函数返回一个指向最终的目标字符串 dest 的指针。


6.strstr()函数,返回字符串中首次出现子串的地址

   char *strstr( char *str, char * substr );

参数 str为要检索的字符串,substr为要检索的子串。   头文件 #include<string.h>

返回值,返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91303.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!