问题描述
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就行,或者调用自己封装的函数】
char t[100];
strcat(t,p[0]) strcat(t,p[1])
2、判断二维字符数组是否存在回文字符串
例如:char a[] [10]={“asd”,“asa”,“werew”,“yuyu”};
提示存在回文字符串,回文字符串对称
头文件
#include <string.h>
#define N 25
//函数声明
void str_rev_new(char* p);
void str_rev_digui(char str[], int len);
char* str_cat_32(char* dest, const char* src);
//字符串移动的函数声明
void sort_up(char* p, int len);
char* da_xie(char* p, int len);
char* shu_zi(char* p, int len);
char* xiao_xie(char* p, int len);
char* te_shu(char* p, int len);
void huiwen32(char* p);
函数集
#include <stdio.h>
//#include "head.h"
//对字符串实现升序排列
void sort_up(char* p, int len)
{
char temp;
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (*(p+j) > *(p+j+1))
//if (strcmp(*(p + j), *(p + j + 1)) > 0)
{
temp = *(p + j); //单个字符不需要用strcpy来实现交换
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
//从字符串中挑选出大写
char* da_xie(char* p, int len)
{
static char new[50] = "";
int temp,j = 0;
for (int i = 0; i < len; i++)
{
temp = *(p + i);
if ((temp >= 65) && (temp <= 90))
{
new[j] = *(p + i);
j++;
}
}
return new;
}
//从字符串中选择出数字
char* shu_zi(char* p, int len)
{
static char new[50] = "";
int temp, j = 0;
for (int i = 0; i < len; i++)
{
temp = *(p + i);
if ((temp >= 48) && (temp <= 57))
{
new[j] = *(p + i);
j++;
}
}
return new;
}
// 从字符串中选择出小写字母
char* xiao_xie(char* p, int len)
{
static char new[50] = "";
int temp, j = 0;
for (int i = 0; i < len; i++)
{
temp = *(p + i);
if ((temp >= 97) && (temp <= 122))
{
new[j] = *(p + i);
j++;
}
}
return new;
}
//特殊字符
char* te_shu(char* p, int len)
{
static char new[50] = "";
int temp, j = 0;
for (int i = 0; i < len; i++)
{
temp = *(p + i);
if ((temp >= 32) && (temp <= 47))
{
new[j] = *(p + i);
j++;
}
}
return new;
}
//判断字符串是否为回文字符串
void huiwen32(char *p)
{
int len = strlen(p);
int j = len - 1, i = 0;
int flag = 0;
while (i < j)
{
if (*(p + i) == *(p + j))
{
i++; j--;
}
else
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("%s是回文字符串\n", p);
}
else
{
printf("%s不是回文字符串\n", p);
}
}
//指针指向字符串,实现字符的逆置
void str_rev_new(char *p)
{
int len = strlen(p);
int i = 0, j = len - 1;
char temp;
while (i < j)
{
temp = *(p + i);
*(p + i) = *(p + j);
*(p + j) = temp;
i++; j--;
}
puts(p);
}
//通过递归实现字符串的逆置(未完成)
void str_rev_digui(char str[], int len)
{
static int i = 0;
char str_temp[50] = "";
strcpy_s(str_temp[i] = str[len - 1]);
str_rev_digui(str, len - 1);
i++;
puts(str_temp);
}
//字符串连接
char* str_cat_32(char* dest, const char* src)
{
int i = 0, j = 0;
while (*(dest+i))
{
i++;
}
while (*(src+j))
{
*(dest+i) = *(src+j);
i++; j++;
}
*(dest+i) = '\0';
return dest;
}
主函数
#include <stdio.h>
#include "head.h"
int main()
{
char str[] = "AGu12cKCOCh)%s49gaBRIkedn+_(6581";
int len = strlen(str);
char* p1 = str;
printf("bifore = %s\n", str);
//sort_up(p1, len);
printf("after = %s\n", str);
char *p2 = da_xie(p1, len);
printf("大写字母为:%s\n", p2);
printf("大写字母地址为:%p\n", p2);
char* p3 = shu_zi(p1, len);
printf("数字为:%s\n", p3);
printf("数字地址为:%p\n", p3);
char* p4 = xiao_xie(p1, len);
printf("小写字母为:%s\n", p4);
printf("小写字母地址为:%p\n", p4);
char* p5 = te_shu(p1, len);
printf("特殊字符为:%s\n", p5); // 未加static之前,所有返回的地址值是相同的
//使用字符指针数组接收返回的字符串地址
char* p6[4] = { da_xie(p1, len) ,shu_zi(p1, len) ,xiao_xie(p1, len),te_shu(p1, len) };
for (int i = 0; i < 4; i++)
{
printf("字符指针数组第%d个数组为:%s\n",i+1, p6[i]);
}
//再拼接起来
char temp_str[100] = "";
char* p7 = temp_str;
p7 = str_cat_32(p6[0], p6[1]);
p7 = str_cat_32(p6[0], p6[2]);
p7 = str_cat_32(p6[0], p6[3]);
printf("拼接后:%s\n", p7); //拼接后,p6[0]的内容也随之改变
char str1[][10] = { "asa","jgjgjghjg","oldasijgo","asdfdsa","ggggggggg"};
char* p8[5] = { str1[0],str1[1], str1[2] ,str1[3] ,str1[4] };
for (int i = 0; i < 5; i++)
{
//huiwen32(p8[i]);
huiwen32(*(p8 + i));
}
//char str1[25] = "helloworld";
//char str2[] = "testtest";
int len = strlen(str1);
//char* p = str1;
str_rev_new(p);
str_rev_digui(str, len);
//printf("brfore = %s\n", p);
//char * p1 = str_cat_32(str1, str2);
//printf("after = %s\n", p1);
return 0;
}