1.实现数组内容的逆序
#include <stdio.h>
#include <string.h>
void reser(char *str,int len)
{
int left=0;
int right =len-2;
while(left<right)
{
char tmp=*(str+left);
*(str+left)=*(str+right);
*(str+right)=tmp;
left++;
right--;
}
}
int main()
{
char str[]="xwd yyds";
int len = sizeof(str)/sizeof(str[0]);
printf("%s\n",str);
reser(str,len);
printf("%s\n",str);
return 0;
}
2.实现字符串的复制
#include <stdio.h>
char* mystrcpy(char *dest,const char* src)
{
char *bak=dest;
while(*src!='\0')
{
*dest++=*src++;
}
*dest='\0';
return bak;
}
int main()
{
char *p="xwd yyds";
char str[64]={0};
mystrcpy(str,p);
printf("%s",str);
return 0;
}
3.实现字符串的复制(复制指定的数量)
#include <stdio.h>
char* mystrcpy(char *dest,const char* src,int len)
{
char *bak=dest;
while(*src!='\0' &&len>0)
{
*dest++=*src++;
len--;
}
*dest='\0';
return bak;
}
int main()
{
char *p="xwd yyds";
char str[64]={0};
int num=0;
printf("请输入要复制的数量:");
scanf("%d",&num);
mystrcpy(str,p,num);
printf("%s",str);
return 0;
}
3.初始化数组,并全部遍历输出
#include <stdio.h>
void Initarr(int *arr,int len)
{
for(int i=0;i<len;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",(arr+i));
}
}
void listarr(int *arr,int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",*(arr+i));
}
}
int main()
{
int numarr[10]={0};
int len =sizeof(numarr)/sizeof(numarr[0]);
Initarr(numarr,len);
listarr(numarr,len);
return 0;
}
4. 分析 (*( void (*) () )0)( ); (-----来自C陷阱与缺陷)
总结:把0强制转换类型变成void (*) ()函数指针类型,再对其调用
5.分析 void (*signal (int,void(*)(int) ) )(int); (-----来自C陷阱与缺陷)
总结:这是对函数signal的声明,signal的返回值是函数指针,该函数指针指向的函数返回值是void,参数是int,而 signal的参数有两个,第1个是int,第二个是函数指针,该函数指针指向的函数的返回值是void,参数是int;
6. 实现 mystrncat()函数,实现将指定数量的字符粘贴到指定字符串后面
#include <stdio.h>
#include <string.h>
char *mystrncat(char *dest,const char *src,int len)
{
char *bak=dest;
while(*dest!='\0')
{
dest++;
}
while((*dest++=*src++)!='\0' &&--len>0);
*dest='\0';
return bak;
}
int main()
{
char str[64]="xwd";
const char *p=" yyds";
mystrncat(str,p,4);
printf("%s\n",str);
return 0;
}
7.模仿strcmp实现 mystrcmp函数 实现字符串的比较
#include <stdio.h>
#include <string.h>
int mystrcmp(char *p1,char *p2)
{
while((*p1^*p2)==0 && *p1!='\0' &&*p2!='\0')
{
p1++;
p2++;
}
if((*p1^*p2))
{
if(*p1>*p2) return 1;
if(*p1<*p2) return -1;
}else return 0;
}
int main()
{
char *p1="xwd yyds";
char *p2="axwd yyds";
int ret = mystrcmp(p1,p2);
printf("ret = %d\n",ret);
return 0;
}