《C语言中字符串的处理方式》由会员分享,可在线阅读,更多相关《C语言中字符串的处理方式(4页珍藏版)》请在人人文库网上搜索。

1、C语言中字符串的处理方式“很难从字符串中找到感觉,但它们却是我们能指望的唯一交流纽带”-C语言程序设计 现代方法写多了 Java 代码,对 String 类 很是喜爱,可惜经典的 C 语言没有。最近在做程序过程中,发现对C语言字符串的处理很模糊,一会儿用数组,一会儿用指针,一会儿又引入 string.h。于是决定总结一下C语言中字符串的处理,一则作为笔记,二则作为技术交流和大家分享。字符串字面量(字符串常量,在C标准中称为,字符串字面量)如何存储字符串字面量从本质上而言,C语言把字符串字面量作为字符数组来处理。当C语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+。

2、1的内存空间,在末尾增加一个额外的字符空字符(0)。字符串字面量的操作 通常情况下可以在任何C语言允许使用 char * 指针的地方使用字符串字面量。如:char *p;p= abc;1 这个赋值操作不是复制 abc 中的字符,而仅仅是使 p 指向字符串的第一个字符。字符串变量一些编程语言为声明字符串提供了特殊的 string 类型。C语言采取了不同的方式:只要保证字符串是以空字符串结尾的,任何一维的字符数组都可以用来存储字符串。如果编写自己的字符串处理函数,请千万注意要正确地处理空字符。假设需要变量用来存储最多80个字符的字符串。既然字符串会在末尾处需要空字符,那么要声明的变量是含有81个字。

3、符的数组。#define STR_LEN 80/* 惯用法*/char strSTR_LEN+ 1;2 对宏加一的这种方法是C程序员常用的方式。初始化字符串变量 char date18= June 14;date1: | J | u | n | e | | 1 | 4 | 0 |char date29= June 14;date2: | J | u | n | e | | 1 | 4 | 0 | 0 |大体上来说,这种行为与C语言处理数组初始化的方法一致。字符串变量的声明可以忽略它的长度。这种情况下,编译器会自动计算长度:char date3= June 14;编译器为date3分配8个字符的。

4、空间。字符数组与字符指针一起来比较一下下面两个声明:char date= June 14;它声明date是个字符数组。和这个声明相似的是下面这个声明:char *date= June 14;它声明date是个指向字符串字面量的指针。注意,不能错误地认为上面两种date可以互换。两者之间有着显著的差异:(1) 在声明为数组时,就像任意数组元素一样,可以修改存储在date中的字符。在声明为指针时,date指向字符串字面量。(2) 在声明为数组时,date是数组名。在声明为指针时,date是变量,这个变量可以在程序执行期间指向其他字符串。如果需要可以修改的字符串,那么就要建立字符数组来存储字符串。这。

5、时声明指针变量是不够的。下面的声明使编译器为指针变量分配了足够的内存空间:char*p;可惜的是,它不为字符串分配空间。在使用p作为字符串之前,必须把p指向字符串数组。一种可能是把p指向已经存在的字符串变量:charstrSTR_LEN+1,*p;p=str;现在p指向了str的第一个字符,所以可以把p作为字符串使用了。3. 字符串的读写3.1 用 printf 函数和 puts 函数写字符串%s 允许 printf 函数写字符串。如:char str= Are we having fun yet?;printf(Value of str: %sn, str);如果只显示字符串的一部分,可以用。

6、 %.ps。这里的 p 是要显示的字符数量。语句printf(%.6sn, str);会显示出Are weC函数库还提供puts函数。puts(str);3.2 用 scanf 函数和 gets 函数读字符串在 scanf 函数调用中,不需要在 str 前添加运算符 &。因为 str 是数组名,编译器会自动把它当作指针来处理。调用时,scanf 函数会跳过空白字符,然后读入字符,并且把读入的字符存储到 str 中,知道遇到空白字符为止。scanf 函数始终会在字符串末尾存储一个空字符。用 scanf 函数读入字符串永远不会包含空白字符。因此,scanf 函数通常不会读入一整行输入。换行符会使 。

7、scanf 函数停止读入,空格符或制表符也会产生同样的效果。可以参考下面的例子:#include#define STR_LEN 80int main()char strSTR_LEN+ 1;printf(input a string:);scanf(%s, str);printf(String inputed is:%sn, str);return 0;运行结果如下:Input a string:this is a stringString is:this为了每次读入一整行输入,可以使用 gets 函数。类似于 scanf 函数,gets 函数把读入的字符放到数组中,然后存储一个空字符。然而,。

8、在其他方面 gets 函数有些不同于 scanf 函数: (1) gets 函数不会在开始读字符串之前跳过空白字符( scanf 函数会跳过)。(2) gets 函数会持续读入直到找到换行符才停止(scanf 函数会在任意空白字符处停止)。此外,gets 函数会忽略掉换行符,而不会把它存储到数组中,用空字符代替换行符。3.3 逐个字符读字符串因为 scanf 函数和 gets 函数都有风险且不够灵活,C 程序员经常会编写自己的输入函数。通过每次一个字符的方式来读入字符串。下面是自己编写的读取字符串的函数 read_line():int read_line(char strp,int n)char ch;int i= 0;while(ch= getchar()!= n)if(i n)stri+= ch;stri= 0;/* terminates string*/return i;/* number of characters stored*/返回之前,read_line 函数在字符串的末尾放置了一个空字符。就像 scanf 函数和 gets 函数一样,标准函数会自动在输入字符串的末尾放置一个空字符串。然而,如果自己写输入函数,必须要考虑到这一点。3。

在C语言中如何处理字符串,C语言中字符串的处理方式相关推荐

  1. oracle sql 符号,Oracle的SQL语句中如何处理‘’符号

    Oracle的SQL语句中如何处理'&'符号 在Oracle中,如果在sql中出现'&'符号,会被自动转义: 而被要求输入在&符号后跟随的字符串的值,例如: update ta ...

  2. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...

  3. ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。

    题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字符的个数, 在主函数中输入字符串以及输出上述结果. 只要结果,别输出什么提示信息. 输入 一行字符串 输出 统计数据, ...

  4. R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串、str_which函数返回字符串向量中所有包含匹配字符的位置(索引)

    R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串.str_which函数返回字符串向量中所有包含匹配字符的位置(索引) 目录

  5. R语言应用substr函数和substring函数抽取(extract)、删除(Remove)、替换、匹配(Match)特定的字符串、并对比两个函数的异同、grepl检查子字符串是否存在于字符串中

    R语言应用substr函数和substring函数抽取(extract).删除(Remove).替换(Replace).匹配(Match)特定的字符串.并对比substr函数和substring函数在 ...

  6. c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析

    1. 引言 C语言程序设计是一门实践性很强的语言课程,在程序设计过程中经常需要从键盘输入所需要的数据.C语言没有专门的输入语句,可以调用C语言编译系统提供的函数库中的库函数来实现.有些程序虽然调试成功 ...

  7. c语言分隔符分离出str字符串中的数字,C语言版Tokenize()函数,由分隔符获取字符串...

    测试环境: 操作系统: Windows10 64位 运行环境: Visual Studio 10 函数: /********************************************** ...

  8. android 数组赋值字符串_c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

  9. c语言两字符串转数字后相加,一个觉得很难的C语言问题。对两个数字字符串相加。 C语言 如何把一个字符串中相连的两个数字转化为一......

    导航:网站首页 > 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个字符串中相连的两个数字转化为一... 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个 ...

最新文章

  1. 网页转变成app,隐藏浏览器地址栏
  2. Dockefile CentOS SSH 服务的实现
  3. 织梦动态PHP可以删除吗,DeDe织梦cms如何全站动态化,取消静态功能
  4. 2017.3.7 搞笑世界杯 失败总结
  5. xlib/x11:创建一个监测键盘事件的窗口-3-fullscreen-windowed
  6. 超星未来张剑谈智能网联汽车计算平台:不能只考虑算力
  7. 威学一百_涨价通知丨威学一百VIP全年畅学卡价格即将上调!
  8. mysql 游标的用途及使用方法
  9. liunx 的 crontab
  10. w3school和w3cschool两个网站有什么关系和区别?
  11. 白帽飞客从入门到放肆
  12. Caused by: java.lang.SecurityException: Neither user 10068 nor current process has android.permissio
  13. vue中使用市区(地区)联动 复制三步完成
  14. 2020十大黄金配资交易平台排名
  15. Sniffer报文放送
  16. vue实现时间段选择组件,分星期,最小粒度半点
  17. 关于数据结构和算法的面试题
  18. uva 10014 Simple calculations(数学推导)
  19. 弘辽科技:想做好标题优化,这些错误不能犯。
  20. java 金额千位用逗号隔开_金额格式化 处理千分位 金额逗号,隔开

热门文章

  1. PS三种切图方法+Cutterman(安装教程、基本使用)
  2. leaflet之轨迹回放(一 Leaflet.MovingMarker)
  3. Vue中使用bounce防抖函数
  4. 跟择善老师系统学习JAVA(一)
  5. Mybatis中当类型为Integer的时候判断该如何写
  6. 3DSlicer中查看形变场
  7. 【报告分享】2022年互联网行业招聘白皮书-个体价值崛起-Moka(附下载)
  8. win10远程连接win7连接不上去的处理办法 发布时间:2020-04-15
  9. 手持POS销售开单终端应用
  10. StarUML类图相关——关联、聚合、组合、泛化、依赖、实现