作业
注意:使用多文件编辑
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;
}
执行结果: