剑指offer(2):字符串
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
剑指offer(2):字符串的更多相关文章
- 剑指Offer:字符串排列【38】
剑指Offer:字符串排列[38] 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bc ...
- 剑指 Offer 38. 字符串的排列 + 无重复元素的全排列
剑指 Offer 38. 字符串的排列 Offer_38 题目描述 解题思路 可以使用递归实现全排列,每次都确定一个数的位置,当所有位置的数都确定后即表示一个排列. 但是考虑到本题需要排除重复的排列, ...
- 剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" ...
- 【剑指Offer】字符串的排列 解题报告(Python)
[剑指Offer]字符串的排列 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 【Java】 剑指offer(38) 字符串的排列
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串ab ...
- 【Java】 剑指offer(50-1) 字符串中第一个只出现一次的字符
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在字符串中找出第一个只出现一次的字符.如输入"abacc ...
- 【剑指offer】字符串的组合
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/26405471 转载请注明出处:http:// ...
- 剑指offer 67. 字符串转换为整数(Leetcode 8. String to Integer (atoi))
题目:剑指offer 67题 需要考虑的情况:空指针.nullptr.空字符串"".正负号.数值溢出.在写代码的时候对这些特殊的输入都定义好合理的输出.可以定义一个全局布尔型变量g ...
- Go语言实现:【剑指offer】字符串的排列
该题目来源于牛客网<剑指offer>专题. 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,b ...
- 剑指offer之字符串是否为数值
1. 题目 这是<剑指offer>上的一道题,刚开始觉得这是一道挺简单的题目,后来发现自己太年轻了,考虑的因素太少了,思考了而是分钟还是无从下手,看了作者的思路深深被他折服了,题目如下: ...
随机推荐
- STM32F407 正点原子按键输入实验
库函数版本: 库函数 源文件 头文件 GPIO_Init(GPIOE, &GPIOE_initstructure) stm32f4xx_gpio.c stm32f4xx_gpio.h RCC_ ...
- PAT Advanced 1046 Shortest Distance (20 分) (知识点:贪心算法)
The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed t ...
- Docker 内pip安装package报错: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'
说来奇幻(对本菜来说, 经常遇到堪称奇幻的问题) 之前在docker里面各种安装都没问题, 也不知道什么引起的, 昨天晚上调试的时候卸载了一个包的版本,然后就安不上了. 宿主机安装依然各种流畅,唯独d ...
- YUM源使用阿里镜像
备份系统自带的yum源 # 前提:需要联网才能使用 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bac ...
- 【leetcode】1161. Maximum Level Sum of a Binary Tree
题目如下: Given the root of a binary tree, the level of its root is 1, the level of its children is 2, a ...
- Linux文件及目录查找
Linux文件及目录查找 一which——显示命令的完整路径 [root@centos71 ~]# which ls alias ls='ls --color=auto' /usr/bin/ls [r ...
- ASP.NET上传一个文件夹
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- POJ 2385 Apple Catching ( 经典DP )
题意 : 有两颗苹果树,在 1~T 的时间内会有两颗中的其中一颗落下一颗苹果,一头奶牛想要获取最多的苹果,但是它能够在树间转移的次数为 W 且奶牛一开始是在第一颗树下,请编程算出最多的奶牛获得的苹果数 ...
- C++STL手写版
手写STL,卡常专用. node为变量类型,可以自由定义,以下不再赘述. 1.stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可. struct stack{ int tp;n ...
- HDU - 6578 Blank DP + 滚动数组
HDU - 6578 Blank 题意 给你\(\{0,1,2, 3\}\)四个数,分别填入长度为\(n\)的数列中,有\(m\)个限制条件,\(l_{i}, r_{i}, x_{i}\)表示在\([ ...