指针作业:
1.自定义函数,实现字符串连接
char *strcat(char *dest, char *src);
#include<stdio.h>
#include<string.h>
char *Strcat(char *dest, char *src)
{
int n = strlen(dest);
int i = 0;
while (dest++[i+n] =src++[i]);
return dest;
}
void main()
{
char dest[20] = "abcd";
char scr[20] = "efgh";
Strcat(dest,scr);
printf("连接后字符串:%s\n",dest);
}
2.实现字符串的排序[ 升序、降序都实现] [ 使用函数指针调用]
void sort(char *str,int n,int flag)
参数说明: arr接收实参数组、n接收数组长度
flag接收升降序,如果为1则完成升序,如果为0则是降序
#include <stdio.h>
#include <string.h>
void descending(char *str,int n)
{
char c;
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(*(str+j)<*(str+j+1))
{
c=*(str+j);*(str+j)=*(str+j+1);*(str+j+1)=c;
}
}
}
}
void Ascending(char *str,int n)
{
char c;
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(*(str+j)>*(str+j+1))
{
c=*(str+j);*(str+j)=*(str+j+1);*(str+j+1)=c;
}
}
}
}
void sort(char *str,int n,void (*p)(char*,int))
{
p(str,n);
}
int main(int argc, const char *argv[])
{
int k;
char str[]="ertyucvbk";
int n=strlen(str)-1;
scanf("%d",&k);
if(k==1)
sort(str,n,Ascending);
if(k==0)
sort(str,n,descending);
puts(str);
return 0;
}
指针练习:
1.使用字符数组指针指向二维字符数组,通过字符指针数组实现每个字符串的输出
void StrPrint(char *p[3],int n) //p数组指针 ,n二维字符数组的个数
指针数组指向二维的每一个字符串的地址,
StrPrint()
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;
}
5.自己封装strcpy函数,返回目标字符串的地址
char *MyStrcpy(char *dest,char *src)
{
char *k=dest;
while(*src)
{
*dest=*src;
src++;
dest++;
}
*dest='\0';
return k;
}
int main(int argc, const char *argv[])
{
char str[20],str1[20];
gets(str1);
char *k=MyStrcpy(str,str1);
printf("k=%s\n",k);
return 0;
}