字符指针又是指针的一个难点,特别是针对二维字符数组,这要对于*和&的用法十分的熟悉,*既是取值符又是降维符号。它可以将二维降到一维,一维降到单个值。特别是在数组指针的应用上格外注意。下面是今天的脑图:
课堂练习:
1.使用字符数组指针指向二维字符数组,通过字符指针数组实现每个字符串的输出
void StrPrint(char *p[3],int n) //p数组指针 ,n二维字符数组的个数
指针数组指向二维的每一个字符串的地址,
void StrPrint(char *p[3],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s\t",*p+i);
}
}
int main(int argc, const char *argv[])
{
char a[][10]={"asdf","wert","zaa"};
char *p[3]={a[0],a[1],a[2]};
StrPrint(a,3);
}
2.计算字符指针数组中最大字符串
//计算指针数组中最大字符串
void StrMax(char *p[3],int n)
{
int i;
char max[20]="";
for(i=0;i<n;i++)
{
if(i==0)
{
strcpy(max,*(p+i));
}
if(strcmp(max,*(p+i))<0)
{
strcpy(max,*(p+i));
}
}
printf("最大值是:%s\n",max);
}
int main(int argc, const char *argv[])
{
char a[][10]={"asdf","wert","zaa"};
char *p[3]={a[0],a[1],a[2]};
StrMax(a,3);
}
3.判断一个字符串是否是回文字符串【指针】。例如“asdsa” 回文字符串的特点对称
int HuiWen(char *p) //是回文返回1,否则返回0
int HuiWen(char *p)
{
char *q=p+strlen(p)-1;
while(p<q)
{
if(*p!=*q)
{
return 0;
}
p++;q--;
}
return 1;
}
int main(int argc, const char *argv[])
{
char str[20];
gets(str);
if(HuiWen(str)==1)
printf("是\n");
else
printf("不是\n");
}
4.删除字符串中的空格
void DeleteSpace(char *p)
{
char *q=p;
while(*p)
{
if(*p!=' ')
{
*q=*p;
q++;
}
p++;
}
*q='\0';
}
int main(int argc, const char *argv[])
{
char str[20];
gets(str);
DeleteSpace(str);
puts(str);
return 0;
}
Day11作业:
1.自定义函数,实现字符串连接
char *strcat ( char *dest , char *src )
#include <stdio.h>
#include <string.h>
char *Strcat(char *dest,char *src){
int n = strlen(dest);
int n2 = strlen(src);
for(int i = 0; i < n2; i ++){
*(dest+n+i) = *(src+i);
}
return dest;
}
int main(int argc, const char *argv[])
{
char a[20] = "dsafe";
char b[10] = "sdgdfv";
char *p = Strcat(a,b);
printf("拼接后的字符串是%s\n",p);
return 0;
}
结果如下:
2.实现字符串的排序【升序、降序都实现】【使用函数指针调用】
void sort( char *str , int n , int flag)
参数说明:arr接收实参数组、n接收数组长度flag接收升降序,如果为1则完成升序,如果为0则是降序
#include <stdio.h>
#include <string.h>
void Sheng(char *s,int n){
while(n > 0){
int type = 0;
for(int i = 0; i < n - 1; i ++){
if(*(s+i) > *(s+i+1)){
type ++;
char c = *(s+i);
*(s+i) = *(s+i+1);
*(s+i+1) = c;
}
}
if(type == 0){
break;
}
n --;
}
}
void Jiang(char *s,int n){
while(n > 0){
int type = 0;
for(int i = 0; i < n - 1; i ++){
if(*(s+i) < *(s+i+1)){
type ++;
char c = *(s+i);
*(s+i) = *(s+i+1);
*(s+i+1) = c;
}
}
if(type == 0){
break;
}
n --;
}
}
void Sort(char *str,int n,int flag){
if(flag)
Sheng(str,n);
else
Jiang(str,n);
}
int main(int argc, const char *argv[])
{
char arr[30] = "qpwoeirutyalsmdnkfjghvbcxz";
int n = strlen(arr);
void (*p)(char *,int,int) = Sort;
p(arr,n,1);
printf("升序为%s\n",arr);
p(arr,n,0);
printf("降序为%s\n",arr);
return 0;
}
结果如下: