710一维字符数组

一、一维字符数组

【1】数组名的含义

数组名表示数组中首元素的地址,不能更改

【2】C中字符串的处理逻辑

C语言中没有字符串类型,所以字符串用字符数组储存,为了区分,字符串后面有看不见的‘\0’作为结束的标志

例子:

终端输入一个字符串,求字符串中大写字母和小写字母的个数。

#include<myhead.h>
int main(int argc, const char *argv[])
{
    //设置数组大小
	char arr[100];
	int i=0,j;
	int a=0,b=0;
    //输入字符串赋值给字符数组
	scanf("%s",&arr[i]);
	do
	{
		if (arr[i]=='\0')
		{
			break;
		}
		else if(arr[i]>='a'&&arr[i]<='z')
		{
			a++;
		}
		else if (arr[i]>='A'&&arr[i]<='Z')
		{
			b++;
		}
		i++;
	} while (i<100);
	printf("小写字母%d个,大写字母%d个\n",a,b);
	return 0;
}

【3】字符串的输入输出函数

i)gets

函数原型:
    char *gets(char *s);
使用:
    gets(字符串的首地址); //从终端获取字符串

使用gets函数获取会报警告,因为gets不会做合理性检查(可能数组不能容纳下字符串也会写入)

ii)puts

函数原型:
    int puts(const char *s);
使用:
    puts(字符串的首地址);
处理逻辑:
    从字符串的首地址开始,一直向后输出,直到遇到'\0'结束

示例代码:

#include<myhead.h>
int main(int argc, const char *argv[])
{
	char arr[100];
	gets(arr);
	int i;
	int b=0;
	for (i=0; arr[i]!='\0'; i++)
	{
        //下标为i的元素是空格
		if(arr[i]==' ')
		{
			b++;//空格自增
		}
	}
	printf("空格数%d个\n",b);
	return 0;
}

二、函数

i)strlen

功能:求字符串的真实长度(不包括'\0')

函数原型:
    size_t strlen(const char *s);
使用:
    strlen(字符串首地址)
功能:求字符串不包含'\0'的真实长度

ii)strcpy

函数原型:
    char *strcpy(char *dest, const char *src);
使用
    strcpy(目标字符串首地址, 源字符串首地址);
将源字符串中的内容,拷贝给目标字符串中,需要保证dest字符串的空间足够大,来接受拷贝的结果  

iii)strcat

函数原型:

函数原型:
    char *strcat(char *dest, const char *src);
使用:
    strcat(目标字符串的首地址, 源字符串的首地址)

功能:将src字符串拼接到dest字符串后面
dest目标字符串必须足够长,接收拼接后的结果

iv)strcmp

字符串比较函数,C中不支持字符串的比较,需要用到strcmp函数

函数原型:
    int strcmp(const char *s1, const char *s2);
使用:
    strcmp(字符串s1的首地址, 字符串s2的首地址);
功能:比较s1和s2的大小,返回ASCII码的差值
执行逻辑:
    比较字符串s1和s2中相同位置的每一个字符,如果字符相同继续向下一个位置比较,如果不同直接返回s1中字符-s2中字符的差值,结束函数(遇到不同字符就结束)

v)bzero

函数原型:
    void bzero(void *s, size_t n);
使用:
    bzero(&a,2);

功能:
    内存置0,从首地址开始置n个字节的0

vi)memset

函数原型:
    void *memset(void *s, int c, size_t n);
使用
   memset(&a,90,3);

功能:
    把从s地址开始的n个Byte的空间置为c

作业:

求二维数组中元素最大值的行标和列标,并输出最大值

#include<myhead.h>
int main(int argc, const char *argv[])
{
	int a[2][3]={1,3,5,7,9,2};
	int i,j;
	int max=a[0][0],b=0,c=0;
	for (i=0; i<2; i++)
	{
		for (j=0; j<3; j++)
		{
			if(a[i][j]>max)
			{
				max=a[i][j];
				b=i;
				c=j;
				
			}
			
		}

	}
	printf("最大值的行标为%d,列标为%d\n",b,c);
	printf("最大值为:%d\n",a[b][c]);
	printf("\n");

	return 0;
}

运行结果:

终端输入一个数,输出该数的二进制

#include<myhead.h>
int main(int argc, const char *argv[])
{
	int arr[32]={};
	int i,j;
	int a=0;
	printf("请输入一个数:");
	scanf("%d",&i);
	if(i==0)
	{
		printf("0的二进制数是:0");
	}
	while(i!=0)
	{
		arr[a]=i%2;
		i=i/2;
		a++;
	}
	for (j=a-1; j>=0;j-- )
	{
		printf("%d",arr[j]);
	}
	printf("\n");

	
	return 0;
}

运行结果:

自己实现strcpy、strlen、strcat、strcmp

strcpy:

#include<myhead.h>
int main(int argc, const char *argv[])
{
	char a[100]="qqqqqqqq";
	char b[]="hello";
	puts(a);
	int i=0;
	while(b[i])
	{
		a[i]=b[i];
		i++;
	}

	puts(a);
	return 0;
}

strcat:

#include<myhead.h>
int main(int argc, const char *argv[])
{
	char a[100]="hello ";
	char b[]="world";
	puts(a);
	int i=0,j=0;
	//strcat(a,b);
	while(a[i])
		i++;
	while (b[j])
	{
		a[i+j]=b[j];
		j++;
	}
	a[i+j]=b[j];
	puts(a);
	return 0;
}

strcmp:

#include<myhead.h>
int main(int argc, const char *argv[])
{
	char a[]="hello";
	char b[]="he";
	int len = strlen(a);
	int i=0;
	int c=0;
    while(a[i])
	{
		if (a[i]!=b[i])
		{
			c=a[i]-b[i];
			break;
		}
		i++;

	}
	printf("%d\n",c);
	return 0;
}

strlen:

#include <myhead.h>
int main(int argc, const char *argv[])
{
    char str[100]="";  //不完全初始化,都是'\0'
    gets(str);
    int i = 0;
    while(str[i])
    {
        i++;
    }
    printf("字符串的长度为%d\n",i);
    return 0;
}

终端输入一个带空格的字符串,输出有多少个单词

__hello_i_p_ 3
__h_i 2
h_o 2
ho 1
#include<myhead.h>
int main(int argc, const char *argv[])
{
    char str[1000];
    printf("请输入一个字符串: ");
    gets(str);  // 安全读取整行(包括空格)

    int a = 0;
    int b = 0;

    for (int i = 0; str[i] != '\0'; i++) {
        if (str[i] != ' ' && str[i] != '\n' && !b) 
		{  // 排除换行符
            a++;
            b = 1;
        } else if (str[i] == ' ' || str[i] == '\n') {
            b = 0;
        }
    }

    printf("单词数量: %d\n", a);
    return 0;
}

运行结果:

实现字符串的逆置
int main(int argc, const char *argv[])
{
    char arr1[100]="";
	printf("输入一串字符串:");
	gets(arr1);
	int len=strlen(arr1);
	int i,j;
	for(i=0;i<len/2;i++)
	{
		j=arr1[i];
		arr1[i]=arr1[len-1-i];
		arr1[len-1-i]=j;

	}
		printf("%s\n",arr1);

	return 0;
}
运行结果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值