1.利用指针函数实现字符串strcat
#include <stdio.h>
char *Strcat(char *p,char *q)
{
char *k=p;
p=p+strlen(p)-1;
while(*q)
{
*p=*q;
p++;
q++;
}
*p='\0';
return k;
}
int main(int argc, const char *argv[])
{
char arr[30]="";
char arr1[10]="";
printf("请输入主字符串\n");
scanf("%s",arr);
printf("请输入连接字符串\n");
scanf("%s",arr1);
char *p=Strcat(arr,arr1);
printf("%s\n",p);
return 0;
}
2.利用指针函数进行strcmp封装
#include <stdio.h>
char *mystrcpy(char *p,char *q)
{
int i=0,j=0,k=0;
for(i=0;*(p+i)!='\0';i++)
{
*(q+j)=*(p+i);
j++;
}
*(q+j)='\0';
return q;
}
int main(int argc, const char *argv[])
{
char arr[]="hello";
char brr[]="world";
char *q=mystrcpy(arr,brr);
printf("%p\n",q);
printf("%s\n",q);
return 0;
}
3.在命令行输入 通过指针实现简单的计算器
#include <stdio.h>
int k(const char *p)
{
int i=0;
int num=0;
int n=0;
for(i=0;*(p+i)!='\0';i++)
{
n=*(p+i)-'0';
num=num*10+n;
}
return num;
}
#if 0
int g(const char *p,int sum2)
{
int i=0;
int n=0;
int num=0;
for(i=0;*(p+i)!='\0';i++)
{
n=*(p+i)-'0';
num=num*10+n;
}
return num;
}
#endif
int main(int argc, const char *argv[])
{
// int sum1=sizeof(argv[1]);
// int sum2=sizeof(argv[3]);
int a=k(argv[1]);
int b=k(argv[3]);
switch(*argv[2])
{
case '+':
printf("%d+%d=%d",a,b,a+b);
break;
case '-':
printf("%d-%d=%d",a,b,a-b);
break;
case '*':
printf("%d*%d=%d",a,b,a*b);
break;
case '/':
printf("%d/%d=%d",a,b,a/b);
break;
}
return 0;
}
4.自定义函数实现字符串的排序{排序,升序都实现}
#include <stdio.h>
#include<string.h>
char *sort(char *p,int n,int flag)
{
int i=0,j=0;
char temp=0;
char *k=p;
for (i=1;i<n ;i++ )
{
for(j=0;j<n-i;j++)
{
if(flag==1)
{
if(*(p+j)>*(p+j+1))
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
if(flag==0)
{
if(*(p+j)<*(p+j+1))
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
}
return k;
}
int main(int argc, const char *argv[])
{
char arr[20]="";
int flag=0;
printf("请输入字符串:\n");
scanf("%s",arr);
printf("升序输入1,降序输入0\n");
scanf("%d",&flag);
int n=strlen(arr);
char *p=sort(arr,n,flag);
printf("%s\n",p);
return 0;
}
5.利用函数指针实现二维数组中间行和列的值
#include <stdio.h>
int Sum(int arr[3][3],int line,int row)
{
int i;
int j;
int num=0;
int num1=0;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
if(j==line/2||i==row/2)
{
num=num+arr[i][j];
}
}
}
printf("%d\n",num);
// printf("数组中间行和列的和为%d",num);
return num;
}
int main(int argc, const char *argv[])
{
int arr[3][3]={1,4,4,2,5,6,7,8,9};
//int line=sizeof(arr)/sizeof(arr[0]);
// int row=sizeof(arr[0])/sizeof(arr[0][0]);
Sum(arr,3,3);
int (*p)(int arr[3][3],int,int)=Sum;
// printf("%d\n",p);
return 0;
}
6.判断是否为回文字符串
#include <stdio.h>
#include<string.h>
//判断是否为回文字符串
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 arr[20]="";
printf("请输入字符串\n");
gets(arr);
int num=huiwen(arr);
if(num==1)
{
printf("该字符串是回文");
}
if(num==0)
{
printf("该字符串不是回文");
}
return 0;
}
7.删除字符数组中的空格
#include <stdio.h>
void acc(char *p)
{
int i=0;
char brr[20]="";
char *q=brr;
int j=0;
for(i=0;*(p+i)!='\0';i++)
{
if(*(p+i)!=' ')
{
*(q+j)=*(p+i);
j++;
}
}
*(q+j)='\0';
puts(q);
}
int main(int argc, const char *argv[])
{
char arr[]={"ada adad terb"};
acc(arr);
return 0;
}
8.进行字符串的比较.
#include <stdio.h>
#include<string.h>
void StrPrint(char *p[5],int n)
{
int i=0;
int j=0;
char num[20]="";
for(i=0;i<n;i++)
{
if(i==0)
{
strcpy(num,*(p+i));
}
else if(strcmp(num,*(p+i))<0)
{
strcpy(num,*(p+i));
}
}
printf("%s\n",num);
}
int main(int argc, const char *argv[])
{
#if 0
char str[]="hello";
char str1[]="world";
char *p[2]={str,str1};
#endif
char a[][10]={"dada","wettey","ghjhgj","nvbncvbc","wzxd"};
char *p[5]={a[0],a[1],a[2],a[3],a[4]};
StrPrint(p,5);
return 0;
}