20201130-C语言-字符和字符串

字符串的本质

  • 一串字符,但有特别的格式要求,即最后一个必须是串结束符
  • 一串就是很多个字符,0个,1个,n个,再加上’\0’结束符,形成字符串
  • 字符串最平常的表示:双引号
  • 字符串在内存中的表示:一段内存空间,刚好对应一个字符数组
  • 字符串的C语言表示
    • char str[N];
    • char *str;
  • 也就是说,字符串在内存本质上,是一个字符数组
    • 串复制
    • 串连接
    • 串比较
    • 串数长度等均为整体操作
    • 数组不能整体操作,需要相应的功能函数来实现

字符串的输入

1 scanf方法
%s
		1. 遇到空格,tab,enter结束
		2. 自动在结束处补上'\0'的串结束标志
		3. 装入串的内存空间要足够,取数组的地址,数组名即可
%c

2 gets方法

3 getchar()方法

4 从文件中读入串

5 常量串最好使用const str *s = "this is a string";来定义

字符串的功能函数

  • 串复制strcpy

  • 串连接strcat

  • 串比较strcmp

  • 串长度计数,这里是指有效长度,即不包括串的结束符strlen

串复制strcpy

strcpy(字符数组1,字符串2)
作用:将字符串2复制到字符数组1中去。
例如:
char str1[10],  str2[ ] = “China”;
strcpy(str1, str2);  正确!
str1=str2;   错误!
strcpy(str1, “China”);正确!
str1 = “China”;   错误!

串连接strcat

strcat(字符数组1,字符串2)
作用:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中。
例如:
char str1[15]={“I am ”};            
char str2[ ]={“happy”};
strcat(str1, str2);

串比较strcmp

字符串的比较规则:
对两个字符串从左至右逐个对应字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。
如全部字符相同,则认为相等;
若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
例如:
    “these”  	与  “that”
    “abc”  		与  “abc”
    “36+54”  	与  “36strcmp(字符串1,字符串2)
作用:比较字符串1和字符串2的大小。比较的结果由函数值带回。
☆ 如果字符串1=字符串2,函数值等于0。
☆ 如果字符串1>字符串2,函数值大于0。
☆ 如果字符串1<字符串2,函数值小于0。
例如:
if (strcmp(str1, str2)  > 0 )     则str1大于str2 
if (strcmp(str1, str2)  < 0 )     则str1小于str2  
if (strcmp(str1, str2)  == 0 )    则str1等于str2  

串长度strlen

strlen(字符串)
作用:计算字符串的长度。字符串的长度为第一个‘\0’之前的字符个数。
例如:
char str[100] = “boy”;
strlen(str)的结果为3
strlen(“china”)的结果为5
strlen(“ch\0ina”)的结果是什么?

C 中有大量操作字符串的函数

序号函数 & 目的
1strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
2strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。
3strlen(s1); 返回字符串 s1 的长度。
4strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
5strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str1[12] = "Hello";
   char str2[12] = "World";
   char str3[12];
   int  len ;
 
   /* 复制 str1 到 str3 */
   strcpy(str3, str1);
   printf("strcpy( str3, str1) :  %s\n", str3 );
 
   /* 连接 str1 和 str2 */
   strcat( str1, str2);
   printf("strcat( str1, str2):   %s\n", str1 );
 
   /* 连接后,str1 的总长度 */
   len = strlen(str1);
   printf("strlen(str1) :  %d\n", len );
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

strcpy( str3, str1) :  Hello
strcat( str1, str2):   HelloWorld
strlen(str1) :  10

以后还会有命令行的操作,命令行,肯定就是一个字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值