1.封装strlen
法一:指针
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//封装strlen(指针)
char arr[32]="123456";
char *p=arr;
int len=0;
while(*p!='\0'){
p++;
len++;
}
printf("len=%d\n",len);
return 0;
}
法二:数组
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i=0;
char str[32]="hello world";
while(str[i]!='\0'){
i++;
}
printf("len=%d\n",i);
return 0;
}
2. 封装stcpy
法一(指针):
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//封装strcpy
char arr[32]="hello world";
char brr[32]="world";
char *p1=arr;
char *p2=brr;
int i=0;
while(*p2!='\0'){
*p1=*p2;
p1++;
p2++;
}
*(p1)='\0';
puts(arr);
return 0;
}
法二(数组):
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char str1[32]="helloworld";
char str2[32]="hqyj";
int i=0;
for(i=0;str1[i]!='\0';i++){
str1[i]=str2[i];
}
puts(str1);
puts(str2);
return 0;
}
//strcpy(str1,str2);
//puts(str1);
3.封装strcat
法一(指针):
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//strcat封装
char arr[32]="hello";
char brr[32]="world";
int len=strlen(arr);
char *start=brr;
char *end=arr+len-1;
while(*start!='\0'){
*(end+1)=*start;
end++;
start++;
}
*start='\0';
puts(arr);
return 0;
}
法二(数组):
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//字符拼接
char str1[30]="0";
char str2[30]="0";
int len1=0;
int len2=0;
int i=0;
printf("请输入字符串1\n");
gets(str1);
printf("请输入字符串2\n");
gets(str2);
for(i=0;str1[i]!='\0';i++){
len1++;
}
for(i=0;str2[i]!='\0';i++){
len2++;
}
for(i=0;str2[i]!='\0';i++){
str1[len1+i]=str2[i];
}
//将s2的'\0'追加到s1中
str1[len1+i]=str2[i];
printf("拼接之后:");
puts(str1);
return 0;
}
4.封装strcmp
法一(指针):
int len1=strlen(arr);
int len2=strlen(brr);
char *p1=arr;
char *p2=brr;
while(*p1==*p2){
p1++;
p2++;
}
if(*p1>*p2)
printf("%d\n",*p1-*p2);
if(*p1<*p2)
printf("%d\n",*p2-*p1);
else
printf("0");
return 0;
}
法二(数组):
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char str1[32]="hello";
char str2[32]="world";
int i,count1=0,count2=0;
int max=0;
for(i=0;str1[i]!='\0';i++){
count1++;
}
for(i=0;str2[i]!='\0';i++){
count2++;
}
if(count1>count2)
max=count1;
else
max=count2;
for(i=0;i<count2;i++){
if(str1[i]==str2[i]){
if(str1=='\0'){
printf("0\n");
break;
}
continue;
}else if(str1[i]>str2[i]){
printf("%d\n",str1[i]-str2[i]);
break;
}else{
printf("%d\n",str2[i]-str1[i]);
break;
}
}
return 0;
}
5.从终端中输入一串字符,求出空格的个数
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char arr[32]="0";
printf("请输入字符串\n");
gets(arr);
char *p=arr;
int count=0;
while(*p!='\0'){
if(*p==' ')
count++;
p++;
}
printf("空格数为%d\n",count);
return 0;
}
6.字符逆置(使用头尾指针)
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//字符逆置(用头尾指针)
char arr[30]="hello";
int len=strlen(arr);
char *start=arr;//头指针
char *end=arr+len-1;//尾指针
// char *end=&arr[4];
char temp;
while(start<end){
temp=*start;
*start=*end;
*end=temp;
*start++;
*end--;
/*
*start=*start ^ *end;
*end=*strart ^ *end;
*start=*start ^ *end;
*/
}
puts(arr);
return 0;
}
7.冒泡排序
法一(指针):
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//冒泡排序
int a[]={4,1,3,7,8};
int i=0,j=0,temp;
int *p=a;
int len=sizeof(a)/sizeof(a[0]);
for(i=0;i<len;i++){
for(j=0;j<len-i;j++){
if(*(p+j)>*(p+j+1)){
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
for(i=0;i<len;i++){
printf("%d",a[i]);
}
printf("\n");
return 0;
}
法二(数组):
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//冒泡排序
int i,j,temp;
int num=0;
int a[num];
printf("请输入个数\n");
scanf("%d",&num);
for(i=0;i<num;i++){
printf("请输入数字:");
scanf("%d",&a[i]);
}
for(i=0;i<num;i++){
for(j=0;j<num-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<num;i++){
printf("%d",a[i]);
}
printf("\n");
return 0;
}
7.指针数组
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//指针数组
char *p1="shanghai";//p1[]="";
char *p2="beijing";
char *str[2]={p1,p2};
printf("%s %s\n",p1,p2);
printf("%s %s\n",str[0],str[1]);
printf("%s %s\n",*str,*(str+1));
printf("%c %c\n",*p1,*(p1+1));
printf("%c %c %c\n",*str[0],*(str[0]+1),*(str[0]+2));
printf("%c %c %c\n",*(*str+0),*(*str+1),*(*str+2));
printf("%c\n",**str);
return 0;
}
8.通过指针访问数组
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//通过指针访问数组.
int a[4]={11,12,13,14};
int *pa=a;//pa指向a的首地址
for(int i=0;i<4;i++){
//通过数组下标进行访问
// printf("%d \n",a[0]);
// printf("%d \n",pa[i]);
//通过指针的间接访问
// printf("%d \n",*(pa+i));//注意区别 ×pa+i和×(pa+i)
printf("%d \n",*(a+i));
}
return 0;
}
重点:
1.int *p 是野指针,里面是随机值,不可取
2.Int*p=NULL; 定义空指针
3.段错误:
3.1数组越界 3.2空指针的间接访问 3.3野指针 3.4 用指针修改常量