C/C++知识点之c语言字符串处理
小标 2018-10-10 来源 : 阅读 1403 评论 0

摘要:本文主要向大家介绍了C/C++知识点之c语言字符串处理,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之c语言字符串处理,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

            

三类函数
   第一: 主函数  mian(){}
   第二: 用户自定义函数
   第三: c语言提供的库函数
   
   
   scanf("%d;;;%d",&a,&b); //程序运行时,第一个参数输入后 必须连着敲三个分号 才能让第二个参数赋值 
   
   printf("%4d, %-6.2f", 5, 4.345);//默认4d代表右对齐 左边填写三空格, %-6.2f 左对齐 右边填写两个空格
   
   
   
                         |-- 整型  2147483648
                         |--浮点型 -- 单双精度
             |--基本类型 |--字符型
             |           |--枚举类型 
             |
             |
  c数据类型  |           |--数组类型
             |--构造类型|--结构体类型 
             |           |-共用体类型
             |
             |--指针类型
             |
             |--空类型
   
所有的数据,在处理时都需要先存放内存,所以不同的类型存储结构不一样

单个字符 -由单引号括起来的一个字符; 占1个字节内存,存储内容为该字符的ascII码对应值
   char a;
   a = getchar();
       putchar(a);

字符串   -由双引号括起来的字符序列; 在内存中从左到右依次存在连续空间,每个字符1个字节,每个值也是ascII码,注意默认尾部会加\0
   char a[] = "i like C";
   puts(a);//输出字符串后自动换行
    
    char a[20];
   gets(a); // 一次只能输入一个字符串到一个字符数组变量(包括空格和tab 直到回车结束)
   

字符串的处理时基于字符数组的..部会加\0
例如:
//char c[9];
//scanf("%s",c); //注意当格式符为%s时,scanf函数的地址列表是字符数组的名字;
void main(){
   char str1[9];
   char str2[9];
   char str3[9] = {"i like C"}; 
   char str4[9] = "i like C";
   char str5[] = "i like C";
   int i;
   for (i=0; i<9; i++)
   {
      scanf("%c", &str1[i]);
   }
   str1[9] = ‘\0‘;
   
   scanf("%s",str2);
   
   printf("%s\n%s",str1,str2); //结果全部相同
}
  

第一个:字符串长度 (strlen()函数)
int strlen(字符数组名);  ##返回不含\0的字符串长度

第二个:字符串拷贝 (strcpy()函数)
boole strcpy(字符数组名, "字符串");  ##返回true or false

第三个:字符串拼接 strcat(str1,str2)函数 
string strcat(字符数组名, "字符串2"); ##返回 参数1中 \0之前 拼接参数2 后的结果
##strcat 注意点
1、参数1(字符数组)不能是字符串常量,必须足够大,以便容纳字符串2的内容;
2、连接前参数1(字符数组)的‘\0‘将被字符串2覆盖,连接后生成新的字符串最后多保留一个‘\0‘
 
第四个:字符串比较 strcmp(‘字符串1‘, ‘字符串2‘)
int strcmp(‘字符串1‘, ‘字符串2‘);  ##返回 串1大于串2时为正 否则为负 或 零(相等)
两个字符串从左到右比较ascii码值的大小直到遇到‘\0‘

第五个: strlwr(字符串)函数
string strlwr("字符串"); ##将字符串中所有大写字母转换为小写字母

第六个: strupr(字符串)函数
string strupr("字符串"); ##将字符串中所有小写字母转换为大写字母

例:
#include 
#include 

int strlens(char *str)
{
   return strlen(str);
}

void string_copy(char string1[],char string2[])
{
  int i; 
  for (i=0; string2[i]!=‘\0‘; i++)
  {
    string1[i] = string2[i];
  } 
   string1[i] = ‘\0‘;
}

void string_strcat(char *str1,char *str2)
{
  printf("\n---%s---\n", strcat(str1,str2));
}

void main()
{
   char c[100];
   char str[20] = "ni hao beijing";
   int  len;
 
   strcpy(c,"hello world"); 
   string_strcat(str, c); 
   len =  strlens(str);
   printf("%s,\n--=%d,\n c=%s",str ,len, c);
}

二维字符串数组
void strarr()
{
   char strone[2][10] = {{‘A‘,‘b‘,‘c‘},{‘V‘,‘i‘,‘p‘}};
   char strtwo[2][10] = {{"Abc"},{"Vip"}};
   char strthree[2][10] = {"Abc","Vip"};

  printf("\n ---%s---\n",strthree[1]); //---Vip---
  printf("\n ---%s---\n", strone[0]); //---Abc---
}

//连续输入三个学生名字 回车键分隔开; 然后输出

void mian()
{
   char name[3][30];
   int i;
   for (i = 0; i<3; i++){
      gets(name[i]);
   }
   
   for (i=0; i<3; i++){
      printf(name[i]);
   }
}

 
自动变量 auto
1、自动变量的存储空间为内存中的动态数据区,该区域中的数据随程序需要自动生成或释放(即程序执行到该作用域时分配内存,函数结束立即释放)
2、函数或符合语句内定义的局部变量,只要不说明是static存储类型都为自动变量

静态变量 static
1、静态变量的存储空间为内存中的静态数据区, 该区域中的数据 在整个运行期内一直占用这些存储空间;直到程序结束被释放;
2、所有的全局变量都是静态变量; 局部变量加上static 才为静态变量;
3、static i = 5; 程序只会定义一次,如果第二次定义时程序发现内存已经存在i就不会执行这句话;

寄存器变量 register 
1、只有自动变量,或形式参数才可以是寄存器变量;全局变量和静态变量不可以;
2、计算机中寄存器数目有限,不能使用太多;
3、寄存器好处,如果 函数中有个寄存器变量,在调用函数时 会直接调用寄存器存放的变量值, 比取内存更快;函数结束释放寄存器变量;
4、寄存器变量只限 int 、char和指针类型变量使用;如果寄存器满了,程序将会自动转换为自动变量;

其他源程序文件公共使用某个变量需要 extern  声明
例:extern int num;
1、说明全局变量num在其他源程序文件中可以使用;
2、如果源程序文件中全局变量仅限该文件使用,只要在该全局变量定义时的类型前加一个 static 
3、static  int m; 说明全局变量m只能在该文件内有效,其他文件不能引用;

宏定义 (宏定义,文件包含,条件编译)

1、不带参数的宏定义: 
   #define 标识符  字符串;
   #define N 2
   #define F N*2    //定义时可以利用已定义的 宏
   作用:在编译预处理时,将源程序中所有标识符换成字符串;即源程序中所有N被换成2
 

2、带参数的宏定义
   例如:
   #define L(r) 2*3.1415926*(r)   //注意(r) 括号中r 如果是表达式 程序替换时不会对表达式处理,
   #define S(a,b,c) (a+b+c)/3
   则表示源程序中如果使用了S(2,3,4)  即编译处理时被替换为 (2+3+4)/3
   
   注意点: 带参数的宏在使用时很像函数 调用; 
   区别一,带参数的宏不涉及函数调用的流程控制转移,存储空间的分配,参数类型匹配,参数传递即返回值
   区别二。函数在调用时在程序运行时执行,而宏替换时在编译预处理阶段执行;(宏的效率更高)

3、文件包含时  如果 a.c 中包含了 b.c b.c中有包含了 d.c  那么 a.c中要先 包含d.c 在包含b.c

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved