回文串

若一个字符串正读和反读都一样,如 level 、 madam,则称之为回文字符串。请编写程
序,输入任意一个字符串,验证其是否为回文。

#include<stdio.h>
#include<string.h>
int main()	{
    char s[100];int i,n,m=1;
	scanf("%s",s);
	n=strlen(s);
	for(i=0;i<n/2;i++)
		if(s[i]!=s[n-1-i]){
		m=0;break;
		}
	if(m) printf("%s 是回文 \n",s);
	else printf("%s 不是回文 \n",s);
	return 0;
}

解法2

#include<stdio.h>
#include <string.h>
#define N 100
void fc(char a[ ]){
	int i, tmp, n;
	n=strlen( a );
	for(i=0;i<n;i++){
		tmp=a[i];
		a[i]=a[n-i-1];
		a[n-i-1]=tmp;
	}
}
int main()
{
	char a[N],b[N];
	gets(a);
	strcpy(b,a);
	fc (a) ;
	if(strcmp(a,b)== 0) printf("%s 是回文串 \n",a);
	else printf("%s 不是回文串 \n",a);
	return 0;
}

多解
在这里插入图片描述

#include <stdio.h>
#include <string.h>
const int maxn = 256;
bool judge(char str[]){
	int len = strlen(str);
	for(int i=0; i<len/2; i++){//枚举字符串的前一半
		if(str[i] != str[len-1-i]){//如果对称位置不同
			return false;
		}
	}
	return true;
}
int main(){
	char str[maxn];   //输入字符串 
	while(gets(str)) {
		bool flag = judge(str);//判断字符串str是否是“回文串”
		if (flag == true){
			printf("YES\n");
		} else{
			printf("NO\n");
		}
	}
	return 0;
}
//拷贝字符串,将内存source上的值存到另一个内存上
char *mystrcpy(char *dest,const char *source)
{
    if (dest == NULL || source == NULL)
        return NULL;
    char *p = dest;
    while (*source != '\0')//与下面两行可以合写成while((*dest++=*source++)!='\0');
        *dest++ = *source++;
    *dest= '\0';
    return p;
}
//拼接字符串,把p2拼到p1后面
char *mystrcat(char *p1,const char *p2)
{
    if (p1 == NULL || p2 == NULL)
        return NULL;
    char *q = p1;
    while (*p1 != '\0')
        p1++;
    while ((*p1++ = *p2++) != '\0');
    return q;

请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

#include<stdio.h>
int main() {
    char i,j;
    printf("请输入第一个字母:\n");
    scanf("%c",&i);
    getchar();//scanf("%c",&j);的问题,第二次是读入的一个换行符,而不是输入的字符,因此需要加一个getchar() 吃掉换行符
    switch(i) {
        case 'm':
            printf("monday\n");
            break;
        case 'w':
            printf("wednesday\n");
            break;
        case 'f':
            printf("friday\n");
            break;
        case 't':
            printf("请输入下一个字母\n");
            scanf("%c",&j);
            if (j=='u') {printf("tuesday\n");break;}
            if (j=='h') {printf("thursday\n");break;}
        case 's':
            printf("请输入下一个字母\n");
            scanf("%c",&j);
            if (j=='a') {printf("saturday\n");break;}
            if (j=='u') {printf("sunday\n"); break;}
        default :
            printf("error\n"); break;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值