2022/11/18拓展班上机课

Vs的使用

  • 新建项目

  • 新建源文件

  • 关闭scanf_sprintf_s检查:project -> 属性 -> C/C++ -> 常规 ->SDL:否
    在这里插入图片描述
    在这里插入图片描述

  • char* str="..."出现”"const char *" 类型的值不能用于初始化 "char *" 类型的实体“错误:project -> 属性 -> C/C++ -> 语言 -> 符合模式:否
    在这里插入图片描述
    在这里插入图片描述

  • 调试

用指针表示字符串

关于指针

这是一个链接~ 什么是指针?

  • 两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。
    • & 是一元运算符,返回操作数的内存地址。
    • * 是一元运算符,返回操作数所指定地址的变量的值。

指针的移动

#include<stdio.h>
#include<string.h>
int main() {
	char* str = "hello world";
	char* point = str;
	
	for (int i = 0; i < strlen(str); i++) {
		printf("%p:%c", point, *point);
		point++;
	}

	return 0;
}

字符串

  • 字符串的输入输出用到%s
    #include<stdio.h>
    #include<string.h>
    #include <stdlib.h>
    int main() {
    	//char* str;//直接这样不行
    	char* str = (char*)malloc(sizeof(char)*30);
    	scanf("%s", str);//不用取地址符了,str指向的就是一片地址空间
    	printf("%s\n", str);
    
    	char str1[30];
    	printf("%d %d", sizeof(str1),sizeof(str));//30 8
    	return 0;
    }
    
#include<stdio.h>
#include<string.h>
int main() {
	char *str = "hello world!";
	printf("str:%s,strlen:%d,sizeof:%d\n", str,strlen(str),sizeof(str));
	//str:hello world!,strlen:12,sizeof:8

	printf("%p\n", str);//00007FF72DB59C28
	printf("%c\n", *str);//h
	printf("%p\n", str+1);//00007FF72DB59C29
	printf("%c\n", *(str+1));//e

	return 0;
}

数组表示字符串(和上面比较一下)

  • 在C语言中,使用string.h头文件中的 strlen() 函数来求字符串的长度。

  • 在C语言中,字符串总是以’\0’作为结尾,所以’\0’也被称为字符串结束标志,或者字符串结束符。由" "包围的字符串会自动在末尾添加’\0’。

    #include<stdio.h>
    #include<string.h>
    int main() {
    	char str1[30] = { 'h','e','l','l','o' };
    	printf("%s", str1);//hello
    
    	char str2[30];
    	str2[0] = 'h';
    	str2[1] = 'e';
    	str2[2] = 'l';
    	str2[3] = 'l';
    	str2[4] = 'o';
    	printf("%s", str2);//hello烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫虜悿f?
    	return 0;
    }
    
  • 注意!字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。

    • char str1[] = "hello world"
    • char str1[] = {"hello world"}
    • char str2[30] = "hello world"
    • char str2[30] = {"hello world"}
    char str1[] = "hello world";
    //char str1[] = {"hello world"};
    printf("str:%s, strlen:%d, sizeof:%d\n",str1,strlen(str1),sizeof(str1));
    //str:hello world, strlen:11, sizeof:12
    
    char str2[30] = "hello world";
    //char str2[30] = {"hello world"};
    printf("str:%s, strlen:%d, sizeof:%d\n",str2,strlen(str2),sizeof(str2));
    //str:hello world, strlen:11, sizeof:30
    
    // char str[30];
    // str = "hello world";
    // 哒咩
    

数组和指针表示字符串是可以互换的

#include<stdio.h>
#include<string.h>
int main() {
	char str[] = "hello";
	char* point = str;

	for (int i = 0; i < strlen(str); i++)
		printf("%c %c %d\n", str[i], *(point + i), str[i] == *(point + i));
	/*
	h h 1
	e e 1
	l l 1
	l l 1
	o o 1
	*/
	return 0;
}

题目

在这里插入图片描述
在这里插入图片描述

char *match( char *s, char ch1, char ch2 ){
    int sign = 0;
    char* c = s;
    char* p = "";
    while(*c != '\0'){
        if(!sign&&*c == ch1) {
            sign = 1;
            p = c;
        }
        if(sign) printf("%c",*c);
        if(*c == ch2) break;
        
        c++;
    }
    printf("\n");
    return p;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值