剑指offer(2):字符串
2024-09-05 20:45:51
C语言中的字符串
C语言中字符串的存储方式和数组类似,都是连续定长的内存块。字符串数组以\0
结尾,所以会比正常数组多一位,char str3[5] = "1234"; //此处赋值字符串长度应小于5
。
常用字符串函数: <string.h>
字符串复制
char *strcpy(char *dest, const char *src)
,将字符串src复制给dest。char *strncpy(char *dest, const char *src, int n)
,将字符串src的前n个字符复制给dest。
#include <stdio.h>
#include <string.h>
int main()
{
char dest[30] = "hello world";
char src[] = "carlsplace";
printf("original :%s\n", dest);
printf("after strncpy() :%s\n", strncpy(dest, src, 3));
printf("after strcpy() :%s\n", strcpy(dest, src));
return 0;
}
/******输出******
original :hello world
after strncpy() :carlo world
after strcpy() :carlsplace
****************/
字符串拼接
char *strcat(char *dest, const char *src)
,将字符串src拼接到dest后面char *strncat(char *dest, const char *src, int n)
将字符串src的前n个字符拼接到dest后面
int main ()
{
char src[50], dest[50], dest2[50];
strcpy(src, "This is source.");
strcpy(dest, "This is destination1.");
strcpy(dest2, "This is destination2.");
strcat(dest, src);
printf("after strcat(): |%s|\n", dest);
strncat(dest2, src, 9);
printf("after strncat(): |%s|\n", dest2);
return(0);
}
/******输出******
after strcat(): |This is destination1.This is source.|
after strncat(): |This is destination2.This is s|
****************/
字符串比较
int strcmp(const char *s1, const char *s2);
,比较字符串s1和s2,返回s1-s2,相等返回0。strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符int strncmp(const char *s1, const char *s2, int n);
,比较字符串s1的和s2的前n个字符
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "aBcDeF";
char b[] = "aaCdEf";
char c[] = "aacdef";
char d[] = "aBcDeF";
printf("strcmp(a, b) : %d\n", strcmp(a, b));
printf("strcmp(b, a) : %d\n", strcmp(b, a));
printf("strcmp(a, d) : %d\n", strcmp(a, d));
printf("strncmp(b, c, 2) : %d\n", strncmp(b, c, 2));
printf("strncmp(b, c, 3) : %d\n", strncmp(b, c, 3));
return 0;
}
/******输出******
strcmp(a, b) : -31
strcmp(b, a) : 31
strcmp(a, d) : 0
strncmp(b, c, 2) : 0
strncmp(b, c, 3) : -32
****************/
字符串查找
char * strchr (const char *str, int c)
,其中参数c
须传入字符,会自动被转化为ASCII码。函数返回字符c
第一次出现位置的指针char *strrchr(const char *str, int c)
,函数返回字符c
最后一次出现位置的指针
#include <stdio.h>
#include <string.h>
int main(){
char s[] = "012345A7890123456789012345A7890";
char *p1 = NULL;
char *p2 = NULL;
p1 = strchr(s, 'A');
p2 = strrchr(s, 'A');
printf("%s\n", s);
printf("%s\n", p1);
printf("%s\n", p2);
return 0;
}
/******输出******
012345A7890123456789012345A7890
A7890123456789012345A7890
A7890
****************/
字符串长度
unsigned int strlen (char *s)
,返回字符串长度,不包含\0
,注意其与sizeof()
的区别
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "The Arch-based Manjaro is a great Linux distribution.";
char str2[100] = "The Arch-based Manjaro is a great Linux distribution.";
printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
return 0;
}
/******输出******
strlen(str1)=53, sizeof(str1)=54
strlen(str2)=53, sizeof(str2)=100
****************/
Python中的字符串
Python中的字符串可以看做list,Python中提供了方便的字符串操作方式。
字符串运算符
- 使用
+
可直接进行字符串拼接 - 使用
*
可重复输出字符串 - 使用
[i]
和[:]
可对字符串索引和切片 in
和not in
可用来判断字符(串)之间的包含关系
常用字符串内建函数string.xxx
string.find(str, beg=0, end=len(string))
检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1string.index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在 string中会报一个异常.string.format()
格式化字符串
>>> "{:.2f}".format(3.1415926)
`3.14`
string.isalnum()
如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 Falsestring.isalpha()
如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 Falsestring.isdecimal()
如果 string 只包含十进制数字则返回 True 否则返回 False.string.isdigit()
如果 string 只包含数字则返回 True 否则返回 False.string.islower()
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 Falsestring.rstrip()
删除 string 字符串末尾的空格.string.split()
默然以空格为界分割字符,括号内可填入自定分割字符,分隔符可以为普通字符,也可以为\n
等转义字符。
>>> 'carl_will_go'.split('_will_')
['carl', 'go']
- 'string.join(seq)'
以string为间隔拼接序列
>>> '_'.join(['a', 'b', 'c'])
'a_b_c'
- `string.find(str)'
查找str在string 中位置,有则返回下标,没有返回-1
>>> 'abc'.find('b')
1
最新文章
- RoboGuice :Could not load finalizer in its own class loader 警告
- multi2sim,booksim简介
- 20、android解决方案(转载)
- asp.net mvc+EF 递归生成树结构返回json
- poj3589---判断两个数有多接近
- fastcgi重启
- PHP 实现定时任务的几种方法
- 移动端iOS阻止橡皮筋效果
- Java基础学习(五)-- Java中常用的工具类、枚举、Java中的单例模式之详解
- H5-处理支付-前端部分
- 第五篇 - Selenium突破反爬获取qq邮件标题
- Homebrew macOS 包管理
- <;顺序访问>;<;随机访问>;<;HDFS>;
- sqlyog v12.09 注册码
- SQL语句嵌套if
- DPM恢复点和保持期、常见问题排除指南
- 《C# to IL》第一章 IL入门
- JVM内存参数详解以及配置调优
- [LOJ 6004] 圆桌聚餐
- 解决MySQL server has gone away问题的两种有效办法
热门文章
- 3.css3文字与字体
- 前端开发HTML&;css入门——一些其他常用的文本标签
- 31. Next Permutation (JAVA)
- 关于jsp删除成功,添加成功等之后 页面自动跳转的js写法
- 团队项目作业-Beta版本发布
- java代码实现H5页面
- MySQL数据库4Python操作mysql、索引、慢查询日志
- 【leetcode】1170. Compare Strings by Frequency of the Smallest Character
- css盒子模型中的border属性
- Java——容器(Comparable)