linuxC学习第十六天

今天主要了解了一下字符串处理函数。

一、gets

1、gets与scanf的区别,可以读空格。但是gets本身不安全,可能会导致数组越界,一般不使用。
2、使用gets要带<string.h>头文件。

二、fgets

1、fgets是stdio.h中的函数,可以读取空格,换行。当数组大小不够时会自动截断,保留一个字符位给’\0’用
2、fgeets的格式,fgets(str,10,stdin)。str:数组名,10:要读取的长度,stdin:代表指针的标准输入。

三、其他输入输出

1、put:打印字符串
2、puts:打印字符串,会自动换行
3、getchar:读取一个字符
4、putchar:打印一个字符
5、strlen:计算字符串长度

四、字符数组的比较,复制

1、字符串的粘贴
strcat(str1,str2):将str2的内容粘贴到str1后面。注意str1的长度必须足够长,不然会越界。
strncat(str1,str2,n):将str2的n个字符的内容复制到str1后面
2、字符串的比较
strcmp(str1,str2):对str1和str2进行比较,如果str1 > str2 函数返回正数,如果str1 < str2 函数返回负数,如果str1 == str2 函数返回0;
3、字符串的复制
strcpy(str1,str2):将str2的内容复制到str1中,要求str1的空间比str2大。
strncpy(str1,str2,n):将str2的n字节内容复制到str1中。注意:strncpy不会复制’\0’,如果str2的内容比str1的内容少要自己补‘、0’

五、一些其他的内容

1、格式化字符串:sprintf():它是将内容写到数组中,格式如下:
sprintf(str,“a= %d,b= &d\n”,a,b)。后半部分和printf相同,前半部分是要写入的数组名。
2、从字符串中读入
sscanf()
3、将字符串转换为整数
atoi,注意;它是从左往右扫描,遇到第一个非数字的数就结束了。
4、指针数组
形式如下:char **str或者 char *str[ ]。
5、命令行参数
int main(int argc,char *argv[ ])
argc是命令行参数的个数
argv是命令行参数的值,是一个指针数组。

六、今天学习到达两个代码

1、输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.
提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧

#include <stdio.h>

void found(char *pa)
{
	char *pStart = pa;
	char *pEnd   = pa;
	
	while(*pStart++)									//找帧头
	{
		if(pStart[0]=='h' && pStart[1]=='e' && pStart[2]=='a' && pStart[3]=='d')
			break;
	}
	
	if(*pStart == '\0')								//判断帧头是否存在
	{
		printf("无有效帧头\n");
		return;
	}
	
	pStart += 4;
	*pEnd   = *pStart;
	
	while(*pEnd++)									   //找帧尾
	{
		if(pEnd[0]=='t' && pEnd[1]=='a' && pEnd[2]=='i' && pEnd[3]=='l')
			break;
	}
	
	if(*pEnd == '\0')									//判断帧尾是否存在
	{
		printf("无有效帧尾\n");
		return;
	}
	
	*pEnd = '\0';										//将帧尾后面的去掉
	printf("%s\n",pStart);
}

int main()
{
	char a[]="asdheadhauboisoktaildsa";
	
	printf("%s\n",a);
	
	found(a);
	
	return 0;
}

2、方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充规则是:使用1,2,3…的自然数列,从左上角开始,按照顺时针方向螺旋填充。

#include <stdio.h>
#define SIZE 15

void func(char (*pstr)[SIZE])
{	
	int num = 1;
	int p1  = 0;
	int p2  = 0;

	int right = SIZE;							//顶端,底端,右端的初始边界
	int under = SIZE;
	int top = 0;
	
	while(top < under)						//当顶端等于或小于底端时退出
	{
		while(p2 < right)						//右端边界
		{
			pstr[p1][p2++] = num++;
		}
		p1++;	
		p2 -= 2;
		
		while(p1 <  under)					//底端边界
		{
			pstr[p1++][p2--] = num++;	
		}
		
		p1 -= 2;
		p2 += 1;
		
		while(p1 > top)						//顶端边界
		{
			pstr[p1--][p2] = num++;
		}
		
		p1 += 1;
		p2 += 1;
		right -= 2;
		top +=1;
		under -=2;
	}
	
	for (p1 = 0; p1 < SIZE; p1++)			//打印二维数组
	{
		for (p2 = 0; p2 < SIZE-p1; p2++)
		{
			printf ("%4d", pstr[p1][p2]);
		}
		
		printf ("\n");
	}
}


int main()
{
	char str[SIZE][SIZE]={0};
	
	func(str);
	
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值