C/C++教程

C语言程序设计 判断回文例7-11

本文主要是介绍C语言程序设计 判断回文例7-11,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

例7-11原题:输入一个以回车符为结束标志的字符串(少于80个字符),判断该字符串中心对称,如“abcba”、“abccba”是回文,“abcdba”不是回文。
在C语言中,字符串的存储和运算可以用一维字符数组来实现。数组长度取上限80,以回车符 ‘\n’ 作为输入结束符。

课本的源码及我的理解:

#include<stdio.h>
innt main()
{
	int i,k;//两个变量,一个从前移动,一个从后移动 
	char line[80];//定义字符串
	printf("Enter a string: ");//输入提示 
	k=0;
	while((line[k]=getchar())!='\n')//输入的字符不是回车的时候 继续输入 
	  k++;//这里可以数出字符串的有效长度 
	line[k]='\0';//否则结束,以 '\0'结尾
	 
	//判断字符串line是否为回文
	//i 和 k 两个下标从字符串首尾两端同时向中间移动,逐对判断对应字符是否相等
	i=0;
	k=k-1;//k是要从后面移动的 
    while(i<k)//一直移动,直到 i=k 
	{
		if(line[i]!=line[k])//如果两个对应的字母不相等没必要继续了,循环结束跳到while外的语句 
		  break;
		i++;//否则继续移动 
		k--;
	}
	if(i>=k)//若一直循环,说明对应的字母一直相等,也就是回文 
	  printf("It is a pallindrome.\n");
	else//根据条件,这里是从break语句接下来的 
	  printf("It is not a pallindrome.\n");
	return 0;
}

我的解释有误请指出,谢谢!

既然都写了,顺带把一维字符数组也写了吧

定义一个有80个字符型元素的数组str:

char str[80];

字符型数组的初始化

char t[5]={'H','a','p','p','y'};

对静态数组s的前5个元素赋初值,其余元素的初值为0

static char s[6]={'H','a','p','p','y'};
static char s[6]={'H','a','p','p','y',0};

整数0代表字符 ‘\0’ ,所以上式还等价于

static char s[6]={'H','a','p','p','y','\0'};

同样的,如果对全部元素赋了初值,就可以省略数组长度,即:

static char s[]={'H','a','p','p','y','\0'};

上式的数组长度是6
可以用循环语句输出数组 t 的所有元素

for(i=0;i<5;i++)
  putchar(t[i]);

课本解释的字符串:
字符串:有效字符 和 字符串结束符 ‘\0’ 组成

例如:字符串 “Happy” 由6个字符组成,分别是 有效字符’H’, ‘a’, ‘p’, ‘p’, ‘y’ 和 字符串结束符’\0’

将字符串存入字符数组时,由于它有一个结束符 ‘\0’ ,数组长度 至少是字符串的有效长度+1.

字符串常量:用一对双引号括起来的字符序列

字符串的存储——一维数组初始化

static char s[6]={'H','a','p','p','y','\0'};

可以使用字符串常量,上式等价于:

static char s[6]={"Happy"};
static char s[6]="Happy";
这篇关于C语言程序设计 判断回文例7-11的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!