20230109 作业

作业

注意:使用多文件编辑
1、实现字符串移动。

​ 例如char str[]=“AGAB%Sr67gs5ffwt+%” 得到结果是AABGS567grstw%%+

​ 1.1 先对字符串实现升序排序 voidSort(char *p,int n)

​ 1.2 从字符串中挑出大写 char *DaXie(char *p,int n)

​ 1.3 从字符串中挑出数字 char *ShuZi(char *p,int n)

​ 1.4 从字符串中挑出小写 char *XiaoXie(char *p,int n)

​ 1.5 从字符串中挑出特殊字符 char *TeShu(char *p,int n)

​ 1.6 在主函数使用字符指针数组接收返回的字符串地址 char *p[4] p[0]

​ 1.7 按照顺序,实现字符串连接【使用strcat就行,或者调用自己封装的函数】

2、判断二维字符数组是否存在回文字符串

​ 例如:char a[] [10]={“asd”,“asa”,“werew”,“yuyu”};

​ 提示存在回文字符串,回文字符串对称

思路:循环二维字符数组,判断每一个字符串是否是回文字符串【回文字符串使用单独函数】,

​ 2.1 循环二维数组,存在回文返回1,否则返回0 int LoopStr(char str[] [10],int n)

​ 2.2 回文字符串函数,是回文返回1,否则返回0 int HuiWen(char *p)

fun.c

#include "head.h"
void Sort(char *p,int n){
	int i,j;
	char t;
	for(i=0;i<n-1;i++){
		for(j=0;j<n-1-i;j++){
			if(*(p+j) > *(p+j+1)){
				t = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = t;
			}
		}
	}
}
char *DaXie(char *p,int n){
	char *dx = (char *)malloc(n);
	char *q = dx;
	while(*p){
		if(*p >= 'A' && *p<='Z'){
			*q++ = *p;
		}
		p++;
	}
	*q = '\0';
	return dx;
}
char *XiaoXie(char *p,int n){
	char *xx = (char *)malloc(n);
	char *q = xx;
	while(*p){
		if(*p>='a' && *p<='z'){
			*q++ = *p;
		}
		p++;
	}
	*q = '\0';
	return xx;
}
char *ShuZi(char *p,int n){
	char *sz = (char *)malloc(n);
	char *q = sz;
	while(*p){
		if(*p>='0' && *p<='9'){
			*q++ = *p;
		}
		p++;
	}
	*q = '\0';
	return sz;
}
char *TeShu(char *p,int n){
	char *ts = (char *)malloc(n);
	char *q = ts;
	while(*p){
		if(!((*p>= 'a' && *p<= 'z')||(*p>= 'A' && *p<= 'Z')||(*p>= '0' && *p<= '9'))){
			*q++ = *p;	
		}
		p++;
	}
	*q = '\0';
	return ts;
}
int LoopStr(char str[][10],int n){
	int i,r,count=0;
	for(i=0;i<n;i++){
		r = HuiWen(str[i]);
		if(r == 1){
			count++;
			printf("回文数+1:%s\n",str[i]);
		}
	}
	if(count>0){
		return 1;
	}
	return 0;
}
int HuiWen(char *p){
	int len = strlen(p);
	char *q = p + len -1;
	while(p<q){
		if(*p != *q){
			return 0;
		}
		p++;
		q--;
	}
	return 1;
}

head.h

#ifndef __head_h__
#define __head_h__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100

void Sort(char *p,int n);
char *DaXie(char *p,int n);
char *XiaoXie(char *p,int n);
char *ShuZi(char *p,int n);
char *TeShu(char *p,int n);

int LoopStr(char str[][10],int n);
int HuiWen(char *p);

#endif

main.c

#include "head.h"

int main(int argc, const char *argv[])
{
	printf("1 实现字符串移动:");
	char str[]="AGAB%Sr67gs5ffwt+%";
	printf("str[]=%s\n",str);
	int n = strlen(str);
	printf("1.1:\n");
	Sort(str,n);
	printf("sort:%s\n",str);

	char *p1 = DaXie(str,n);
	char *p2 = ShuZi(str,n);
	char *p3 = XiaoXie(str,n);
	char *p4 = TeShu(str,n);

	printf("1.2~1.5:\n");
	printf("daxie:%s\n",p1);
	printf("shuzi:%s\n",p2);
	printf("xiaoxie:%s\n",p3);	
	printf("teshu:%s\n",p4);
	
	char *p[4] = {p1,p2,p3,p4};
	
	char t[N] = "";
	int i;
	for(i=0;i<4;i++){
		strcat(t,p[i]);
	}
	printf("1.7 result:\n");
	puts(t);
	for(i=0;i<4;i++){
		free(p[i]);
		p[i] = NULL;
	}

	printf("2 判断二维字符数组是否存在回文字符串:\n");
	char a[5][10]={"asd","bds","assdssa","asddaa","aasdaa"};
	printf("a[5][10]=\n");
	for(i=0;i<5;i++){
		printf("%s ",a[i]);
	}
	printf("\n");

	int r = LoopStr(a,5);
	if(r==1){
		printf("存在回文\n");
	}else{
		printf("不存在回文\n");
	}


	return 0;
}

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值