当前位置: 首页 > news >正文

C 练习实例70-求字符串长度

 题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。

 解答:

#include <stdio.h>
int length(char *s);
int main()
{int len;char str[20];printf("请输入字符串:\n");scanf("%s",str);len=length(str);printf("字符串有 %d 个字符。",len);
}
//求字符串长度  
int length(char *s)  
{  int i=0;while(*s!='\0'){  i++;   s++;  }  return i;  
}
请输入字符串:
abcd
字符串有 4 个字符。

 

字符串和字符数组

字符串的本质是字符数组,只不过它的后面有 '\0' 这个结尾标志

#include <stdio.h>
int main()
{//字符数组char a[]={'H','e','l','l','o'};	//字符串char b[]="Hello";	//“He11o”会被编译器变成一个字符数组放在某处,//这个数组的长度是6,结尾还有表示结束的0printf("%d\n",sizeof(a));	//结果为5printf("%d\n",sizeof(b));	//结果为6return 0;
}
5
6

scanf一个单词(到空格、tab或回车为止)

#include <stdio.h>
int main()
{char word[8];char word2[8];scanf("%s",word);scanf("%s",word2);printf("%s##%s##\n",word,word2);return 0;
}

输入:

Hello world!

输出: 

Hello##world!##

输入的字符串长度不能够大于等于数组长度,否者会越界,不安全 

输入:

12345678
12345678

 输出:

##12345678##

正确的安全代码:(在%和s之间加上7表是最多只能读7个字符,其余的不要了)

#include <stdio.h>
int main()
{char word[8];char word2[8];scanf("%7s",word);	//在%和s之间加上7表是最多只能读7个字符,其余的不要了scanf("%7s",word2);printf("%s##%s##\n",word,word2);return 0;
}

输入:

123
12345678

输出:

123##1234567##

strlen的用法 

strlen计算实际字符串长度,不包括结尾的0

sizeof计算实际数组长度,包括结尾的0

#include <stdio.h>
#include <string.h>
int main()
{char line[]="Hello";printf("strlen=%d\n",strlen(line));	//strlen计算实际字符串长度,不包括结尾的0printf("sizeof=%d\n",sizeof(line));	//sizeof计算实际数组长度,包括结尾的0return 0;
}
strlen=5
sizeof=6

strcmp的用法

strcmp(s1,s2)的结果为0表示相等

#include <stdio.h>
#include <string.h>
int main()
{char s1[]="abc";char s2[]="bbc";
//	strcmp(s1,s2)的结果为0表示相等。printf("%d\n",strcmp(s1,s2));return 0;
}

 

strcmp(s1,s2)的结果为-1表示s1<s2

#include <stdio.h>
#include <string.h>
int main()
{char s1[]="abc";char s2[]="dbc";
//	strcmp(s1,s2)的结果为-1表示s1<s2printf("%d\n",strcmp(s1,s2));printf("%d\n",'a'-'d');return 0;
}
-1
-3

 

strcmp(s1,s2)的结果为1表示s1>s2

#include <stdio.h>
#include <string.h>
int main()
{char s1[]="dbc";char s2[]="abc";
//	strcmp(s1,s2)的结果为1表示s1>s2printf("%d\n",strcmp(s1,s2));printf("%d\n",'d'-'a');return 0;
}
1
3

strcmp(s1,s2)是逐位比较,当比较出第一个单元相等,则开始比较下一个单元。以此类推,直到比较出最终结果

这很像我们的文件夹以名称排序的排序方式

 

#include <stdio.h>	
#include <string.h>
int main()
{char s1[]="abc";char s2[]="abe";
//	strcmp(s1,s2)是逐位比较,当比较出第一个单元相等,则开始比较下一个单元。以此类推,直到比较出最终结果printf("%d\n",strcmp(s1,s2));printf("%d\n",'c'-'e');return 0;
}
-1
-2

http://www.lryc.cn/news/301741.html

相关文章:

  • HarmonyOS—@State装饰器:组件内状态
  • Linux系统——防火墙拓展及重点理解
  • 阿里云短信验证码的两个坑
  • c入门第十五篇——学而时习之(阶段性总结)
  • 抽象的前端
  • UPC训练赛二十/20240217
  • 【51单片机】LCD1602(江科大)
  • conda与pip的常用命令
  • 你知道什么是物联网MQTT么?
  • P8 pair vector
  • 奇异值分解(SVD)的应用——图像压缩
  • RTDETR改进系列指南
  • 类和结构体的区别
  • 利用Excel模拟投币试验
  • WebService接口测试
  • 语音唤醒——
  • typeScript 类型推论
  • JavaScript 设计模式之代理模式
  • JavaScript 对象判断
  • Android下SF合成流程重学习之onMessageInvalidate
  • 基于SpringBoot+WebSocket+Spring Task的前后端分离外卖项目-订单管理(十七)
  • 【Java多线程进阶】JUC常见类以及CAS机制
  • Python算法100例-1.7 最佳存款方案
  • ADO世界之FIRST
  • 【COMP337 LEC 5-6】
  • 力扣72. 编辑距离(动态规划)
  • linux tree命令找不到:如何使用Linux Tree命令查看文件系统结构
  • OJ_最大逆序差
  • MyBatis-Plus 实体类里写正则让字段phone限制为手机格式
  • K8S之运用污点、容忍度设置Pod的调度约束