c语言学习笔记-字符串(1)

之前这快有点迷迷糊糊,我想在指针前来看看这个,看起来好像比较简单

so,我们可以将字符串和我们前面比较熟悉的数组结合起来

·字符串的存储和运算可以用一维字符数组实现
·一维字符数组的定义、引用、初始化与其他类型的一维数组一样。

 

字符串常量

用一对双引号括起来的字符序列

一个字符串结束符 '\0',像这个

4fb694c1f5a042a2a9cdd6c6f9c2bceb.png

 PS:字符串的有效长度:有效字符的个数

                 简而言之,字符串即是一个特殊的一维字符数组

                 其操作也即是如此:

· 把字符串放入一维字符数组(存储)
· 对字符串的操作 ===> 对字符数组的操作

普通字符数组:数组元素的个数是确定的,一般用下标控制循环

字符串:没有显式地给出有效字符的个数,只规定在字符串结束符 '\0' 之前的字符都是字符串的有效字符,一般用结束符 '\0' 来控制循环

所以我们有了一个very nice的循环条件:s[i] != '\0'

比如看看下面这个题

64ee0794056043bf9beeeab15eb1a308.png 输出样例:

51c3c52db5154d6aa4586a9c58c8c8c8.png

#include<stdio.h>
int main (void)
{
	char ch;
	scanf("%c",&ch);
	while(ch!='\n')
	{
		if(ch>='A'&&ch<='Z')
		{
			if(ch=='Z')
			{
				ch=ch-'A'+'a'-25;//这里要变化后移一位
			}
			else
			{
				ch=ch-'A'+'a'+1;
			}
		}
		else if(ch>='a'&&ch<='z')
		{
			if(ch=='z')
			{
				ch=ch-'a'+'A'-25;
			}
			else
			{
				ch=ch-'a'+'A'+1;
			}
		}
        printf("%c",ch);
        ch=getchar();
	}
	return 0;
 }

 ps:我最近还是整理了些我这个水平可能用到的c语言函数库,等会儿来冲

好吧这道题有点那么费脑瓜子(对于不那么熟悉ASCII码来说有点)

那就再来一道[dogc]

41154615b7e34772842b45506e0bcf63.png

#include<stdio.h>
#include<string.h>
int main(void)
{
	char a[100];
	int i,j;
    gets(a);
	int len;
	len=strlen(a);
		for(j=len-1;j>=0;j--)
	    printf("%c",a[j]);
	return 0;
}

 还有很典型的凯撒密码

bbacd93ee2964ccb9136cf1e891acaf3.png

 

输入一个以回车符为结束标志的字符串,再输入一个正整数offset,用凯撒密码将其加密后输出。

·将明文中的所有字母都在字母表上向后偏移offset位后被替换成密文
·当偏移量offset是2时,表示所有的字母被向后移动 2 位后的字母替换
·所有的字母 A 将被替换成C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则  变为 A,字母 Z 变为 B。
#include <stdio.h>
#include <math.h> 
int main(void)
{
	unsigned char a[80];
	int x = 0;
	int y;
	int offset;
	while( (a[x] = getchar()) != '\n' )
	{
		x++;
	}
	scanf("%d", &offset);
	if( offset > 0 )
	{
		y = offset % 26;//这步实在绝,俺是查的[求放过]
		for( int i = 0; i < x; i++ )
		{
			if( a[i] >= 'A' && a[i] <= 'Z' )
			{
				a[i] += y;
				
				if( a[i] > 'Z' )
				{
					a[i] -= 26;
				}
			}
			else if( a[i] >= 'a' && a[i] <= 'z' )
			{
				a[i] += y;
				
				if( a[i] > 'z' )
				{
					a[i] -= 26;
				}
			}
			
			printf("%c", a[i]);
		}
	}
	else if( offset < 0 )
	{
		offset = fabs(offset);
		y = offset % 26;
		for( int j = 0; j < x; j++ )
		{
			if( a[j] >= 'A' && a[j] <= 'Z' )
			{
				a[j] -= y;
				if( a[j] < 'A' )
				{
					a[j] += 26;
				}
			}
			else if( a[j] >= 'a' && a[j] <= 'z' )
			{
				a[j] -= y;
				if( a[j] < 'a' )
				{
					a[j] += 26;
				}
			}
			printf("%c", a[j]);
		}
	}
	else
	{
		for( int k = 0; k < x; k++ )
		{
			printf("%c", a[k]);
		}
	}
	
    return 0;
}

这个

e24712542bd7483898653ced4a8b9207.png

#include<stdio.h>
#include<string.h>
int main (void)
{
	char a[100];
	char b[100];
	gets(a);
	int x,y;
	y=0;
	x=strlen(a);
	int i,j,m,n;
	for(i=0;i<x;i++)
	{
		if(a[i]>='A'&&a[i]<='Z')
		{
			b[y]=a[i];
			y++;//数组b长度 
		}
	}
	if(y==0)
	{
		printf("Not Found");
	}
	for(i=0;i<y;i++)
	{
		m=0;
		for(j=0;j<i;j++)
		{
			if(b[i]==b[j])
			{
				m=1;//标记重复 
			}
		}
		if(m==0)
		{
			printf("%c",b[i]);
		}
	}
	return 0;
}

958fd9f6735c4bcab6a920c8c19dccd9.png 


算了还是丢这里吧

1. 1. ctype.h

2. 2. 1.isalpha():测试一个字符是否为字母,是则返回1,否则返回0。

3. 3. 2.isdigit():测试一个字符是否为数字,是则返回1,否则返回0。

4. 4. 3.isupper():测试一个字符是否为大写字母。

5. 5. 4.islower():测试一个字符是否为小写字母。

6. 6. 5.toupper():将小写字母转成大写字母,并返回。

7. 7. 6.tolower():将大写字母转成小写字母,并返回。

8. 8.  

9.  

1. string.h

2. 1.strcpy():将一段字符串的内容复制到一个字符数组中。

3. 2.strlen():计算一个字符数组中字符串的长度。不包括null零

4. 3.strcat():合并两个字符数组。

5.  

 1. stdio.h

 2. 1.puts():输出一个字符串。默认在末尾加换行符。

 3. 例:puts("www.baidu.com");

 4. puts(table); // talbe是一个字符数组

 5. 2.gets():获取一个字符串,以Enter结尾.

 6. 3.fopen():获取一个文件入口地址

 7. 4.fclose():关闭一个文件。

 8. 5.fprintf():向文件中输入字符串信息。

 9. 6.fgets():读一行数据。

10. 7.fputs():输出数据到文件。

11. 8.feof():检测是否到达文件末尾。

12. 9.fseek():随机访问文件

13.  

 1. math.h

 2. 1.ceil():向上取整,返回值为浮点数

 3. 2.floor():向下取整,返回值为浮点数

 4. 3.fabs():返回浮点绝对值

 5. 4.cos(x):返回角x的余弦值

 6. 5.sin(x):返回角x的正弦值

 7. 6.tan(x):返回角x的正切值

 8. 7.pow():计算一个值的幂

 9. 8.sqrt():返回一个值的平方根

10. 9.exp(x):返回e^x的值

11. 10.log(x):返回x的自然对数,数学上写成ln(x)。

12. 11.log10(x):返回以10为基的对数。

13.  

 1. 1. stdlib.h

 2. 2. 1.rand():随机产生一个0到32767的值。如果没有给rand()设置产生随机数的种子,那么它总是生成同样的随机数。

 3. 3. 2.srand():设置随机数生成种子。

 4. 4.  

 5. 一个产生正真随机数的例子:

 6. 1. #include

 7. 2. #include

 8. 3. #define NUM_CARDS54

 9. 4. time_t t;

10. 5. srand(time(&t));

11. 6. sub_draw = (rand()%(NUM_CARDS));

12. 7.  

13. 3.malloc():分配堆内存

14. 例:

15. 1. int *temps;

16. 2. temps = (int *)malloc(10*sizeof(int));

17. 3.  

18. 4.free():释放堆内存

19.  

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 闫学灿老师的蓝桥杯C语言课程笔记是一份非常实用和全面的学习资料。在这份笔记中,他以蓝桥杯C语言竞赛为出发点,系统地介绍了C语言的基本知识、编程技巧和解题思路。 首先,这份笔记C语言的基础知识进行了详细的讲解。从数据类型、运算符、控制结构、数组到函数,每个知识点都有清晰的定义和示例。这使得初学者能够迅速上手,了解C语言的基本特性和语法规则。 其次,笔记中还涉及了各种常用的C语言编程技巧。比如,如何进行输入输出、如何进行字符串处理、如何进行文件操作等等。这些技巧是实际编程中经常用到的,通过学习这些技巧,可以提高编程效率和代码质量。 另外,在笔记的后半部分,闫学灿老师还分享了他在蓝桥杯C语言竞赛中的解题思路和经验。这对于想要参加蓝桥杯的学生来说,无疑是非常有价值的。他详细讲解了一些比较经典的题目,以及如何从题目中找到思路和解决方案。 总的来说,闫学灿老师的蓝桥杯C语言课程笔记是一份非常实用和全面的学习资料。不仅适合蓝桥杯竞赛的学生,也适合其他对C语言感兴趣的学习者。通过学习这份笔记,可以提高自己的C语言编程能力,并为今后的编程学习和工作打下坚实的基础。 ### 回答2: 闫学灿是一位知名的编程教育家,他在蓝桥杯和C语言方面有着丰富的教学经验和深厚的专业知识。他的课程笔记以蓝桥杯C语言题目为主线,介绍了C语言的基础知识、高级应用以及解题技巧等内容。 在蓝桥杯C语言竞赛中,学生们通常需要使用C语言编写程序来解决一系列问题。闫学灿的课程笔记通过对大量题目的剖析和解析,帮助学生理解问题的本质,掌握解题的思路和方法。他的讲解通俗易懂,注重实例演示,让学生能够更好地理解和掌握。 课程笔记中,闫学灿详细介绍了C语言的基础语法、控制结构、数组、指针等重要知识点,并通过大量编程实例来巩固学生的学习成果。他注重培养学生的实际动手能力,通过编程实践来提高学生的编程水平和解题能力。 此外,闫学灿的课程笔记还包了一些高级应用,如字符串处理、递归、动态内存分配等,以及一些重要的算法和数据结构,如排序、查找等。通过这些内容的学习,学生可以更全面地掌握C语言的使用和应用。 总的来说,闫学灿的蓝桥杯C语言课程笔记全面系统地介绍了C语言的基础知识和应用技巧,通过丰富的编程实例和解题思路的讲解,帮助学生在蓝桥杯竞赛中取得更好的成绩,并提高他们的编程水平和解决问题的能力。这样的课程材料对于C语言爱好者和想要参加蓝桥杯竞赛的学生来说都是非常有价值的参考资料。 ### 回答3: 蓝桥杯C语言是由蓝桥杯组织举办的一项程序设计竞赛。参赛者需要使用C语言编写程序解决一系列算法和编程题目。 闫学灿(Y总)是一位知名程序员,他开设了一系列C语言课程笔记,内容丰富全面,对于初学者和有一定基础的编程爱好者都非常有帮助。 在闫学灿的C语言课程笔记中,他详细讲解了C语言的基础知识,包变量、数据类型、运算符、流程控制等等。他还介绍了C语言的一些特性和编程技巧,例如指针、结构体、文件操作等。通过学习这些内容,可以帮助我们更好地理解和运用C语言。 闫学灿的C语言课程笔记还包含了许多实例和练习题,通过实践的方式帮助我们巩固所学的知识。他还提供了一些实际项目的源码和解决方案,让我们可以实际操作和应用所学的知识。 总的来说,蓝桥杯C语言闫学灿(Y总课程笔记)是一门非常优秀的课程,对于想要学习C语言并参加蓝桥杯竞赛的学生来说是很好的学习资料。通过学习这门课程,我们可以系统地学习和掌握C语言的知识,并通过实践提高我们的编程能力和解决问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ryan-%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值