字符数组、C语言基础

一、一维数组

字符数组:若干个字符组成的线性结构

字符串:是由0个或者多个单字符组成的串(以双引号括起来,有\0,所有汉字都是字符串)

字符数组是用来储存字符串,字符数组是容器,字符串是数据

1 单字符: 'a'    '  '     '0'

2 字符串:"a"   ""  "   "      "你好"   "0"  "+-"    "!@#$%^"

1.1字符数组的定义

格式:存储类型char 数组名[常量表达式];
存储类型:
        auto:自动类型,一般默认不写的就是自动类型
        static:静态类型,存储在静态区,延长生命周期
        const:修饰词,表示变量的值不可修改
        register:寄存器,访问速度快
        extern:外部变量
        volatile:防止内存优化
数据类型: char
数组名:命名规范
常量表达式:表示数组的个数[不为0,定义不为空,不为小数,初始化时不为变量]
        int arr[0]
        int arr[];
        int arr[2.5];
        int n=5;
        int arr[n]={1,2,3,4,5};错误

1.2字符数组初始化

1>单字符初始化
        char str[5]={ 'a','b','c','d','e'}; 全部初始化
        char str[5]={'a','b','\0','\0','\0'}; 部分初始化,默认以'\0'或者0填充
        char str[]={'a','b','c','\0'}; 省略数组长度, 默认是实际字符的个数
2>字符串赋值
        char str[5]={"abcd" }等价char str[5]="abcd"; //计算 会默认为字符串填充\0
        char str[5]="a"// 部分初始化,默认以'\0'或者0填充
        char str[]="abc"; 等价 char str[4]="abc” 省略数组长度, 默认是实际字符的个数
3>错误
        char str[10];
        str="abc";
        错误
        char str[4]=" abcd" ;错误

1.3一维数组的引用

1>循环逐个引用

        //strlen:计算字符串长度

2>整体引用

        //字符串整体引用

        //字符串的格式控制:%s

printf("%s\n",str);

3> scanf  printf
        char str[50];
        printf("输入-一个字符串: ");
        scanf("%s" ,str); //输入字符串不需要加&
        printf("str=%s\n" ,str);
4> gets puts
        格式char *gets(char *s);
        返回:返回的是一一个字符串
        参数:一个参数
        头文件: #include <stdio.h>
        格式: int puts(const char *s);
        返回:返回输出字符串数组个数
        头文件: #include <stdio.h>
        参数:一个参数,可以是常量,也可以是变量

5>scanf和gets
        1. scanf不识别空格,认为空格是-个数据的结束,gets识别空格
        2.scanf可以输入多个字符串,gets只可以输入一个字符串
        3. scanf返回值输入参数的个数,gets返回字符串
        4.scanf-般以空格、tab、回车结束,gets以回车结束
6> printf和puts
        1. printf没有\n,puts自 带换行功能
        2.printf可以输出多个变量,puts只可以输出一个
        3. printf可以输出任意一种类型, puts只可以输出字符串
        4. printf返回输出格式串的字符个数,puts返回 字符串的数组长度

1.4字符数组长度和字符串长度

字符串长度:不计算\0[strlen]【肉眼所见字符个数】

字符数组长度:计算\0【sizeof】

char a[5]={'a','b','c','d','\0'};字符串长度:4 数组长度:5

char a[3]={'a','b','c'};本质上不是一个字符串(没有\0或者“”)数组长度3

char a[10]="abc" 字符串长度:3数组长度:10

char a[]="abcd"字符串长度:4 数组长度:5

char a[]="ab\0cdef"字符串长度:2 数组长度:8

char a[]="ab\01cd"字符串长度:5 数组长度:6

1.5 字符串练习

1.5.1输入一个字符串【字符串存在空格】,实现字符串逆置

int i=0,j=strlen(str)-1
    while(i<j){
    char t=str[i];
    str[i]=str[j];
    str[j]=t;
    i++;
    j--;
}

1.5.2

实现每一个单词的逆置
"this is my class"————>"class my is this"
1>让整个字符串逆置

2>让每个单词再逆置

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(int argc, const char *argv[])
{
	char str[50]="";
	printf("请输入一个带空格的字符串:");
	gets(str);
	//整体逆置
	int i=0,j=strlen(str)-1;
	while(i<j){
		char t=str[i];str[i]=str[j];str[j]=t;
		i++;j--;
	}
    int t=0,i=0,j=0;
    while(i<strlen(str)){
    while(j!=' '&&j!='\0'){
        j++;
}
t=j-1;
    while(i<t){
        char k=str[i];
        str[i]=str[j];
        str[j]=k;
        i++;j--;
}
    while(j==' '){
        j++;
}
    i=j;
}
printf("%s",str);
return 0;
}

22.字符串“this is my class",计算字符串"is”的个数
输出is出现2次
思路: .
is是一个整体, 假设单字符1”的下标使用循环变量i表示,则's'则可以看成是i+1
a[j]=='&& a[i+1]=='s'

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(int argc, const char *argv[])
{
	char a[50]="";
	printf("输入一个字符串");
	gets(a);
	int count=0;
	for(int i=0;i<strlen(a);i++){
		if(a[i]=='i'&&a[i+1]=='s')
			count++;
	}
	printf("is出现的次数为:%d\n",count);
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值