c基础 day8 指针

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 用指针修改常量

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值