首页 > 其他分享 >字符串回文,翻转

字符串回文,翻转

时间:2023-08-04 11:32:25浏览次数:26  
标签:int len str printf 字符串 回文 翻转

@TOC

前言

从这篇文章开始进行算法的学习,开启新的篇章。


一、字符串回文

字符串回文 : 是指一个字符串从左到右读和从右到左读是一样的,即它的字符顺序颠倒后仍然保持不变。例如,"level"和"madam"就是回文字符串。

在编程中,我们可以使用不同的算法来判断一个字符串是否是回文。

方法 一: 将字符串 一分文二,通过第一个下标 i 和 最后一个下标 j , 从两边开始逐个字符地向中间进行比较。如果 两边相等则不进入 if 语句,返回1,是回文。否则 返回 0 ,不是回文。需要注意的是,数组下标从 0 开始,所以 j = len - 1

int palindrome(char* str)
{
    int i = 0, j = 0;
    int len = strlen(str);

    for (i = 0, j = len - 1; i < j; i++, j--)
    {
        if (str[i] != str[j])					//不相等则 返回 0,不是回文
        {
            return 0;
        }
    }
	return 1;								//返回 1,是回文
}

int main(void)
{
	int ret = palindrome("124321");				//要检测的字符串
    if (ret)
    {
        printf("是回文\n");
    }
    else
    {
        printf("不是回文\n");
    }
	return 0;
}

方法 二: 方法二 主要是将 原字符串进行翻转(字符串翻转下面会讲),将翻转后的字符串与原字符串进行比较,如果相等,是回文。否则,不是回文。使用 strncmp 函数进行比较字符串是否相等。 由于 数组下标从 0 开始,所以 i = len -1 ;

int main(void)
{
	char str[20];
	char buff[20];
	int ret;

	printf("请输入字符串:");
	scanf_s("%s",str, sizeof(str));					//输入要判断的字符串

	int len = strlen(str);
	buff[len] = '\0';

	for (int i = len-1; i >= 0 ; i--)
	{
		buff[len-1 - i] = str[i];
		if (i == 0)
		{
			if (strncmp(buff, str, 20) == 0)			// 相等返回 0
				printf("是回文\n");
			else										
			{
				printf("不是回文\n");
			}
		}
	}
	return 0;
}

注意 : 推荐第一种写法,使用封装函数的方法进行 字符串回文判断,更利于代码的移植。方法二 如果 禁止 使用 strncmp 函数,则 无法实现功能。要学会,理解方法一的思想,更加简便。

二、字符串翻转

字符串翻转是指将一个字符串的字符顺序颠倒过来,即将字符串的最后一个字符放在第一个位置,倒数第二个字符放在第二个位置,以此类推,最后得到一个完全颠倒的字符串。

在编程中,我们可以使用不同的算法来实现字符串翻转的功能。

方法 一: 主要是 通过定义一个中间变量的方法,进行字符串元素的 替换。先将前面的字符 先赋给 中间变量 temp ,再 将 后面的字符 赋给 前面的字符,最后 中间变量 temp 赋给 后面的字符。

由于 数组下标从 0 开始,所以 j = len -1 ;

void restring(char* str)
{
    int i, j;
    int len = strlen(str);
    char temp = 0;

    for (i = 0, j = len - 1; i < j; i++, j--)
    {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}

int main(void)
{
    char str[20] = {"12345"};
	restring(str);
	
	printf("str = %s\n", str);
	return 0;
}

方法 二: 输入要反转的字符串,即可打印翻转结果。 定义两个字符数组,分别存放原字符串 和 翻转后的字符串。将原字符串的字符一次从后向前 传入 buff 数组即可。

由于 数组下标从 0 开始,所以 i = len -1 ;

int main(void)
{
	char str[20];
	char buff[20];

	printf("请输入字符串:");
	scanf_s("%s",str,sizeof(str));

	int len = strlen(str);
	printf("翻转结果:");
	for (int i = len-1; i >=0; i--)
	{
		buff[len -1 - i] = str[i];
		printf("%c", buff[len -1 -i]);
	}
	return 0;
}

字符串回文,翻转_字符串翻转

注意 :

还是推荐第一种写法,使用封装函数的方法进行 字符串回文判断,更利于代码的移植。要学会,理解方法一的思想,更加简便。


总结

字符串回文,翻转 是笔试热门题,大家好好理解。

标签:int,len,str,printf,字符串,回文,翻转
From: https://blog.51cto.com/u_16159289/6959021

相关文章

  • Java获取字符串中首次出现非数字的位置
    /***获取字符串中首次出现非数字的位置*@paramvalue字符串内容*@return首次出现非数字的位置,若无非数字,则返回-1*/publicstaticintgetFirstNonDigitPosInString(Stringvalue){intfirstNonDigitPos=-1;if(TextUtils.i......
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类
    4、数据类型转换1)字符串转换成数值:int()-----------将值转换成整数float()-----------将值转换成小数str()-----------将值转换成字符串bool()-----------将值转换成布尔值例如:int()将值转换成整数s1="188"#字符串ns1=int(s1)#转换成整型数值print(ns1+8)#打印数......
  • 代码随想录算法训练营第九天| 复习字符串和双指针法(看卡哥文章复习)
     KMP算法就是在一个字符串中寻找另一个子串,避免了“跳回下一个字符再重新匹配”,实现了在一次字符串的遍历过程中就可以匹配出子串。28. 实现 strStr()  (本题可以跳过)     卡哥建议:因为KMP算法很难,大家别奢求 一次就把kmp全理解了,大家刚学KMP一定会有各种各样的......
  • C#格式化字符串
     字符串格式String.Format和WriteLine都遵守同样的格式化规则。格式化的格式如下:"{N[,M][:formatString]}",arg1,...argN,在这个格式中: 1)N是从0开始的整数,表示要格式化的参数的个数.2)M是一个可选的整数,表示格式化后的参数所占的宽度,如果M是负数,则左对齐,如果M是......
  • HashSet的new两个相同的String类字符串的变化
    一、定义HashSet的底层是通过HashMap实现的,所以要通过HashMap去寻求答案二、源码分析其实关于这个问题的答案关键源码需在putVal方法中寻找,我用的版本是JDK8//源码publicVput(Kkey,Vvalue){returnputVal(hash(key),key,value,false,true);//......
  • Sql 字符串截取
    注意不同数据库内置函数名称或有差异,可参考1.从左至右截取①使用left()函数可以从左至右对字符串进行截取 语法:LEFT(str,length)str是要进行截取的字符串,length是要截取的长度(数字), left('abcdefg',3)即表示从左开始截取包含第一位到第三位字符串的所有内容例如:执行 ......
  • 字符串
    复健\(Day9\)字符串相关算法\(1.\)最小表示法最小表示法就是找出字符串\(s\)的循环同构串中字典序最小的那一个时间复杂度为\(O(n)\)chars[maxn];intn;intget_min(char*s){ n=strlen(s+1); for(inti=1;i<=n;i++)s[n+i]=s[i]; inti=1,j=2,k=0; while(i<=n&&j<=......
  • 使用正则表达式 移除 HTML 标签后得到字符串
    需求分析后台返回的数据是这样式的需要讲html标签替换high_light_text:"<spanstyle='color:red'>OPPO</span><spanstyle='color:red'>OPPO</span>白色01"使用正则表达式functionstripHTMLTags(htmlString){returnhtmlString.repl......
  • 2023.8.2 翻转卡片游戏
    坑点注意:x不能与任意一张卡片的正面数字相同,包括自己。因此如果一张卡片正反面数字相同,必然不可能是x。暴力由于\(n\leq1000\),因此\(n^2\)暴力是可以过的。遍历每一个\(nums[i]\),判断其正反面是否相同,相同则跳过,不相同则进一步检验。分为两种情况,一是取\(fronts[i]\),另一种是......
  • [代码随想录]Day07-字符串 part01
    题目:344.反转字符串思路:每次把最前面和最后面的交换位置即可strings库里没有反转的方法——这个反转是之后几个题的一个基础代码:双指针调换位置funcreverseString(s[]byte){l,r:=0,len(s)-1//最前面的元素,最后面的元素forl<r{s[l],s[......