R语言-用stringr包处理字符串

2023-11-10

1 字符数统计和字符翻译

1.1 nchar和length

nchar这个函数简单,统计向量中每个元素的字符个数,注意这个函数和length函数的差别:nchar是向量元素的字符个数,而length是向量长度(向量元素的个数)。

x <- c("Hellow", "World", "!")
nchar(x)
[1] 6 5 1
length("")
[1] 1
nchar("")
[1] 0

1.2 tolower,toupper和chartr

DNA <- "AtGCtttACC"
tolower(DNA)
## [1] "atgctttacc"
toupper(DNA)
## [1] "ATGCTTTACC"
chartr("Tt", "Uu", DNA)
## [1] "AuGCuuuACC"
chartr("Tt", "UU", DNA)
## [1] "AUGCUUUACC"

2、字符串连接

paste函数
paste应该是R中最常用字符串函数了,也是R字符串处理函数里面非常纯的不使用正则表达式的函数(因为用不着)。它相当于其他语言的strjoin,但是功能更强大。它把向量连成字串向量,其他类型的数据会转成向量,但不一定是你要的结果:

paste("CK", 1:6, sep = "")
## [1] "CK1" "CK2" "CK3" "CK4" "CK5" "CK6"
x <- list(a = "aaa", b = "bbb", c = "ccc")
y <- list(d = 1, e = 2)
paste(x, y, sep = "-")  #较短的向量被循环使用
## [1] "aaa-1" "bbb-2" "ccc-1"
z <- list(x, y)
paste("T", z, sep = ":")
## [1] "T:list(a = \"aaa\", b = \"bbb\", c = \"ccc\")"
## [2] "T:list(d = 1, e = 2)"

短向量重复使用,列表数据只有一级列表能有好的表现,能不能用看自己需要。会得到什么样的结果是可以预知的,用as.character函数看吧,这又是一个字符串处理函数:

as.character(x)
## [1] "aaa" "bbb" "ccc"
as.character(z)
## [1] "list(a = \"aaa\", b = \"bbb\", c = \"ccc\")"
## [2] "list(d = 1, e = 2)"
paste函数还有一个用法,设置collapse参数,连成一个字符串:

paste(x, y, sep = "-", collapse = "; ")
## [1] "aaa-1; bbb-2; ccc-1"
paste(x, collapse = "; ")
## [1] "aaa; bbb; ccc"

3.字符串拆分


trsplit函数
strsplit函数使用正则表达式,使用格式为:


strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
参数x为字串向量,每个元素都将单独进行拆分。
参数split为拆分位置的字串向量,默认为正则表达式匹配(fixed=FALSE)。如果你没接触过正则表达式,设置fixed=TRUE,表示使用普通文本匹配或正则表达式的精确匹配。普通文本的运算速度快。
perl=TRUE/FALSE的设置和perl语言版本有关,如果正则表达式很长,正确设置表达式并且使用perl=TRUE可以提高运算速度。
参数useBytes设置是否逐个字节进行匹配,默认为FALSE,即按字符而不是字节进行匹配。
下面的例子把一句话按空格拆分为单词:


text <- "Hello Adam!\nHello Ava!"
strsplit(text, " ")
## [[1]]
## [1] "Hello"        "Adam!\nHello" "Ava!"
R语言的字符串事实上也是正则表达式,上面文本中的\n在图形输出中是被解释为换行符的。

strsplit(text, "\\s")
## [[1]]
## [1] "Hello" "Adam!" "Hello" "Ava!"
strsplit得到的结果是列表,后面要怎么处理就得看情况而定了:

class(strsplit(text, "\\s"))
## [1] "list"
有一种情况很特殊:如果split参数的字符长度为0,得到的结果就是一个个的字符:

strsplit(text, "")
## [[1]]
##  [1] "H"  "e"  "l"  "l"  "o"  " "  "A"  "d"  "a"  "m"  "!"  "\n" "H"  "e" 
## [15] "l"  "l"  "o"  " "  "A"  "v"  "a"  "!"

从这里也可以看到R把 \n 是当成一个字符来处理的。


4、字符串查询

grep和grepl函数:
这两个函数返回向量水平的匹配结果,不涉及匹配字符串的详细位置信息。


grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, 
    useBytes = FALSE, invert = FALSE)
grepl(pattern, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)


虽然参数看起差不多,但是返回的结果不一样。下来例子列出C:\windows目录下的所有文件,然后用grep和grepl查找exe文件:

files <- list.files("c:/windows")
grep("\\.exe$", files)
##  [1]   8  28  30  35  36  58  69  99 100 102 111 112 115 117
grepl("\\.exe$", files)
##   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
##  [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [23] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE
##  [34] FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [45] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [56] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [67] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [78] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [89] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## [100]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [111]  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE

grep仅返回匹配项的下标,而grepl返回所有的查询结果,并用逻辑向量表示有没有找到匹配。两者的结果用于提取数据子集的结果都一样:

files[grep("\\.exe$", files)]
##  [1] "bfsvc.exe"      "explorer.exe"   "fveupdate.exe"  "HelpPane.exe"  
##  [5] "hh.exe"         "notepad.exe"    "regedit.exe"    "twunk_16.exe"  
##  [9] "twunk_32.exe"   "uninst.exe"     "winhelp.exe"    "winhlp32.exe"  
## [13] "write.exe"      "xinstaller.exe"
files[grepl("\\.exe$", files)]
##  [1] "bfsvc.exe"      "explorer.exe"   "fveupdate.exe"  "HelpPane.exe"  
##  [5] "hh.exe"         "notepad.exe"    "regedit.exe"    "twunk_16.exe"  
##  [9] "twunk_32.exe"   "uninst.exe"     "winhelp.exe"    "winhlp32.exe"  
## [13] "write.exe"      "xinstaller.exe"

regexpr、gregexpr和regexec

这三个函数返回的结果包含了匹配的具体位置和字符串长度信息,可以用于字符串的提取操作。

sub和gsub函数
虽然sub和gsub是用于字符串替换的函数,但严格地说R语言没有字符串替换的函数,因为R语言不管什么操作对参数都是传值不传址。

text
## [1] "Hellow, Adam!"      "Hi, Adam!"          "How are you, Adam."
sub(pattern = "Adam", replacement = "world", text)
## [1] "Hellow, world!"      "Hi, world!"          "How are you, world."
text
## [1] "Hellow, Adam!"      "Hi, Adam!"          "How are you, Adam."

可以看到:虽然说是“替换”,但原字符串并没有改变,要改变原变量我们只能通过再赋值的方式。 sub和gsub都一样

sub(pattern = "Adam|Ava", replacement = "world", text)
## [1] "Hellow, world!"      "Hi, world!"          "How are you, world."
gsub(pattern = "Adam|Ava", replacement = "world", text)
## [1] "Hellow, world!"      "Hi, world!"          "How are you, world."

sub和gsub函数可以使用提取表达式(转义字符+数字)让部分变成全部:

sub(pattern = ".*(Adam).*", replacement = "\\1", text)
## [1] "Adam" "Adam" "Adam"


字符串提取

substr和substring函数
substr和substring函数通过位置进行字符串拆分或提取,它们本身并不使用正则表达式,但是结合正则表达式函数regexpr、gregexpr或regexec使用可以非常方便地从大量文本中提取所需信息。两者的参数设置基本相同:

substr(x, start, stop)
substring(text, first, last = 1000000L)
x均为要拆分的字串向量
start/first 为截取的起始位置向量
stop/last 为截取字串的终止位置向量
但它们的返回值的长度(个数)有差 别:


substr返回的字串个数等于第一个参数的长度
而substring返回字串个数等于三个参数中最长向量长度,短向量循环使用。
先看第1参数(要 拆分的字符向量)长度为1例子:


x <- "123456789"
substr(x, c(2, 4), c(4, 5, 8))
## [1] "234"
substring(x, c(2, 4), c(4, 5, 8))
## [1] "234"     "45"      "2345678"


因为x的向量长度为1,所以substr获得的结果只有1个字串,即第2和第3个参数向量只用了第一个组合:起始位置2,终止位置4。 而substring的语句三个参数中最长的向量为c(4,5,8),执行时按短向量循环使用的规则第一个参数事实上就是c(x,x,x),第二个参数就成了c(2,4,2),最终截取的字串起始位置组合为:2-4, 4-5和2-8。


请按照这样的处理规则解释下面语句运行的结果:

x <- c("123456789", "abcdefghijklmnopq")
substr(x, c(2, 4), c(4, 5, 8))
## [1] "234" "de"
substring(x, c(2, 4), c(4, 5, 8))
## [1] "234"     "de"      "2345678"
用substring函数可以很方便地把DNA/RNA序列进行三联拆分(用于蛋白质翻译):

用substring函数可以很方便地把DNA/RNA序列进行三联拆分(用于蛋白质翻译):

bases <- c("A", "T", "G", "C")
DNA <- paste(sample(bases, 12, replace = T), collapse = "")
DNA
## [1] "GCAGCGCATATG"
substring(DNA, seq(1, 10, by = 3), seq(3, 12, by = 3))
## [1] "GCA" "GCG" "CAT" "ATG"
用regexpr、gregexpr或regexec函数获得位置信息后再进行字符串提取的操作可以自己试试看。


strtrim函数
用于将字符串修剪到特定的显示宽度,其用法为strtrim(x, width),返回字符串向量的长度等于x的长度。因为是“修剪”,所以只能去掉多余的字符不能增加其他额外的字符:如果字符串本身的长度小于width,得到的是原字符串,别指望它会用空格或其他什么字符补齐:


strtrim(c("abcdef", "abcdef", "abcdef"), c(1, 5, 10))
## [1] "a"      "abcde"  "abcdef"
strtrim(c(1, 123, 1234567), 4)
## [1] "1"    "123"  "1234"
8.2 strwrap函数
该函数把一个字符串当成一个段落的文字(不管字符串中是否有换行符),按照段落的格式(缩进和长度)和断字方式进行分行,每一行是结果中的一个字符串。例如:


str1 <- "Each character string in the input is first split into paragraphs\n(or lines containing whitespace only).  The paragraphs are then\nformatted by breaking lines at word boundaries.  The target\ncolumns for wrapping lines and the indentation of the first and\nall subsequent lines of a paragraph can be controlled\nindependently."
str2 <- rep(str1, 2)
strwrap(str2, width = 80, indent = 2)
##  [1] "  Each character string in the input is first split into paragraphs (or lines"
##  [2] "containing whitespace only).  The paragraphs are then formatted by breaking"  
##  [3] "lines at word boundaries.  The target columns for wrapping lines and the"     
##  [4] "indentation of the first and all subsequent lines of a paragraph can be"      
##  [5] "controlled independently."                                                    
##  [6] "  Each character string in the input is first split into paragraphs (or lines"
##  [7] "containing whitespace only).  The paragraphs are then formatted by breaking"  
##  [8] "lines at word boundaries.  The target columns for wrapping lines and the"     
##  [9] "indentation of the first and all subsequent lines of a paragraph can be"      
## [10] "controlled independently."
simplify参数用于指定结果的返回样式,默认为TRUE,即结果中所有的字符串都按顺序放在一个字符串向量中(如上);如果为FALSE,那么结果将是列表。另外一个参数exdent用于指定除第一行以外的行缩进:


strwrap(str1, width = 80, indent = 0, exdent = 2)
## [1] "Each character string in the input is first split into paragraphs (or lines"  
## [2] "  containing whitespace only).  The paragraphs are then formatted by breaking"
## [3] "  lines at word boundaries.  The target columns for wrapping lines and the"   
## [4] "  indentation of the first and all subsequent lines of a paragraph can be"    
## [5] "  controlled independently."

match和charmatch
match("xx", c("abc", "xx", "xxx", "xx"))
## [1] 2
match(2, c(3, 1, 2, 4))
## [1] 3
charmatch("xx", "xx")
## [1] 1
charmatch("xx", "xxa")
## [1] 1
charmatch("xx", "axx")
## [1] NA
match按向量进行运算,返回第一次匹配的元素的位置(如果有),非字符向量也可用。charmatch函数真坑爹。其他不看了,其实有正则表达式就足够。


----用stringr包

library(stringr)

 
# 合并字符串
fruit <- c("apple","banana","pear","pinapple")
res <- str_c(1:4,fruit,sep=' ',collapse=' ')
str_c('I want to buy ',res,collapse=' ')
 
# 计算字符串长度
str_length(c("i","like","programming R",123,res))
 
# 按位置取子字符串

str_sub(fruit,1,3)

# 按位置取子字符串

> str_sub(fruit,1,3)
[1] "app" "ban" "pea" "pin"
# 子字符串重新赋值
> capital <-toupper(str_sub(fruit,1,1))
> str_sub(fruit,rep(1,4),rep(1,4))<- capital
> capital
[1] "A" "B" "P" "P"
> fruit
[1] "Apple"    "Banana"   "Pear"     "Pinapple"

# 重复字符串

<pre name="code" class="plain">> str_dup(fruit,c(1,2,3,4))
[1] "Apple"                            "BananaBanana"                     "PearPearPear"                     "PinapplePinapplePinapplePinapple"

 

# 加空白

<pre name="code" class="plain">> str_pad(fruit,0,"both")
[1] "Apple"    "Banana"   "Pear"     "Pinapple"

 

# 去除空白

> str_trim(fruit)
[1] "Apple"    "Banana"   "Pear"     "Pinapple"

# 根据正则表达式检验是否匹配

> str_detect(fruit,"a$")
[1] FALSE  TRUE FALSE FALSE
> str_detect(fruit,"[aeiou]")
[1] TRUE TRUE TRUE TRUE
# 找出匹配的字符串位置

> str_locate(fruit,"a")
     start end
[1,]    NA  NA
[2,]     2   2
[3,]     3   3
[4,]     4   4

# 提取匹配的部分

> str_extract(fruit,"[a-z]+")
[1] "pple"    "anana"   "ear"     "inapple"
> str_match(fruit,"[a-z]+")
     [,1]     
[1,] "pple"   
[2,] "anana"  
[3,] "ear"    
[4,] "inapple"

# 替换匹配的部分
> str_replace(fruit,"[aeiou]","-")
[1] "Appl-"    "B-nana"   "P-ar"     "P-napple"

# 分割

> str_split(res," ")
[[1]]
[1] "1"        "apple"    "2"        "banana"   "3"        "pear"     "4"        "pinapple"
# 找出匹配的字符串位置

> str_locate(fruit,"a")
     start end
[1,]    NA  NA
[2,]     2   2
[3,]     3   3
[4,]     4   4

# 提取匹配的部分

> str_extract(fruit,"[a-z]+")
[1] "pple"    "anana"   "ear"     "inapple"
> str_match(fruit,"[a-z]+")
     [,1]     
[1,] "pple"   
[2,] "anana"  
[3,] "ear"    
[4,] "inapple"

# 替换匹配的部分

> str_replace(fruit,"[aeiou]","-")
[1] "Appl-"    "B-nana"   "P-ar"     "P-napple"

# 分割

> str_split(res," ")
[[1]]
[1] "1"        "apple"    "2"        "banana"   "3"        "pear"     "4"        "pinapple"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言-用stringr包处理字符串 的相关文章

  • MongoDB分片实战(一):集群搭建

    随笔 97 文章 9 评论 337 MongoDB分片实战 一 集群搭建 环境准备 Linux环境 主机 OS 备注 192 168 32 13 CentOS6 3 64位 普通PC 192 168 71 43 CentOS6 2 64位
  • Maven 4、JDK配置

    当你的idea中有多个jdk的时候 就需要指定你编译和运行的jdk 在settings xml中配置
  • 使用命令把类打成jar包

    测试用类 public class Hello public static void main String args System out println hello world 一般的Jar包 生成class文件 在命令行中输入下面代码
  • windows桌面应用自动化测试

    1 AutoIt3 原理 使用spy抓应用的hwnd 根据hwnd获取窗口信息 模拟发送鼠标按键 移动窗口实现自动化操作 缺点 获取到的信息少 编程实现复杂 2 UIAutomation msdn介绍 Microsoft UI Automa
  • STM32 USB DFU功能

    STM32 USB DFU功能 工具的安装配置 CubeMX上配置 完善接口 工具使用 HEX固件转为DFU文件 更新固件 DFU特点 工程代码 DFU的全称为 DownLoad Firmware Update即固件升级 以下配置以STM3
  • Junit5单元测试

    配置 Maven配置 我用的spring版本是2 2 2 其实引入一个就行
  • 解读开源 Go HTTP 框架 Hertz

    前言 在参与 Hertz 框架的开发迭代过程中 对 Hertz 的主库也越来越熟悉 接下来的几篇文章我将分别解析 Hertz 的服务注册 服务发现和负载均衡拓展 最后会使用适配于 Hertz 的 etcd 拓展进行实战 欢迎大家关注 Her
  • DSP之TMS320F28335学习总结与笔记(二)————ADC模块

    F28335 ADC模块 ADC转换模块 A D转换器 ADC 将模拟量转换为数字量通常要经过四个步骤 采样 保持 量化和编码 采样 将一个时间上连续变化的模拟量转化为时间上离散变化的模拟量 保持 将采样结果存储起来 直到下次采样 这个过程
  • 高精度斐波那契

    1 为何会有高精度斐波那契一说 0 0 1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21 9 34 10 55 11 89 12 144 13 233 14 377 15 610 16 987 17 1597 18 258
  • CentOS6/7 日常管理--启动服务及日志查看

    CentOS6 chkconfig chkconfig list显示开机启动服务列表 chkconfig level 3 服务名 on off chkconfig 服务名 on off chkconfig del 服务名 删除 关闭 服务
  • 程序员搜索引擎比较

    正如大家口中所说的一样 百度搜索引擎吃相太难看了 如果谷歌搜索还在的话 百度搜索的日子可能并不会太好过 其他搜索引擎 1 360搜索 比较少用甚至没有用过的搜索引擎 360的全家桶太恶心了 简直是流氓 所以很多时候360安全管家 杀毒什么的
  • 开源框架 WebFirst 一键生成项目,在线建表

    1 WebFirst框架描述 WebFirst 是果糖大数据团队开发的新一代 高性能 代码生成器 数据库设计工具 由 net core sqlsugar 开发 导入1000个表只要1 2秒 用法简单 功能强大 支持多种数据库 具体功能如下
  • Bundle Adjustment 光束平差法

    https www cnblogs com Jessica jie p 7739775 html 感觉这个链接讲的比较好理解 看slam的书完全一脸懵
  • linux启动redis失败,解决redis服务启动失败的问题

    最近学redis 就遇到了各种坑 在这里分享一下 我是将redis做成后台 安装 配置环境变量统统省略掉了 做成后台服务呢 首先 cd到redis的安装目录下 再cd到util 接着执行 install server sh 然后修改服务名称
  • windows批处理文件删除n天前的文件

    author skate time 2010 12 23 windows批处理文件删除n天前的文件 用批处理文件删除n天前的文件如果操作系统是 Windows Server 2003 那就好办了 因为它有一个forfiles命令能够查找满足
  • BI大数据名词术语

    大数据的出现带来了许多新的术语 但这些术语往往比较难以理解 因此 我们通过本文给出一个常用的大数据术语表 抛砖引玉 供大家深入了解 部分定义参考了相应的博客文章 A 聚合 Aggregation 搜索 合并 显示数据的过程 算法 Algor
  • Postman之全局变量、环境变量

    1 什么是环境变量 环境变量 postman可以自定义环境参数值 这样就不用每次请求都去输入某些值 直接引用设置的值 使我们的测试更方便 例如 通过变换环境变量来快速变换环境地址 可将本地 测试环境的IP添加至不同的环境变量 调用时使用 x
  • 'react-scripts' 不是内部或外部命令 、propTypes is not defined 解决办法

    在手动安装了React 提供的第三方库 prop types报错的 我的React 就报错运行不了了 报错如下 react scripts 不是内部或外部命令 也不是可运行的程序 或批处理文件 这是一个在学习React 踩的坑 百度了一下

随机推荐

  • webpack打包vue

    在Windows10系统下 自定义打包整个Vue文件夹项目的相关配置项涉及以下内容 安装Node js和npm Node js官网 https nodejs org en download npm是Node js的包管理工具 在Node j
  • JDK8 Date 日期常用使用方法

    JDBC日期的转换 最新JDBC映射将把数据库的日期类型和Java 8的新类型关联起来 SQL gt Java date gt LocalDate time gt LocalTime timestamp gt LocalDateTime L
  • X11相关参数设置

    X11相关参数设置 X11 环境变量 DISPLAY 用来设置将图形显示到何处 变量格式 Xlib connection to 0 0 refused by server 开关闭屏幕显示 连接实际屏幕 确认实际屏幕的name of disp
  • 模式识别和计算机应用(转载)

    导读 只是覆盖了很小的范围 但总结的不错 1 数学方面 1 矩阵的各种分解 比如 LU QR Cholesky SVD Polar 2 广义逆与子空间 3 最小二乘法 特别齐性方程Ax b的各种解法及其几何意义 4 凸分析与凸优化的基本知识
  • 8种专坑同事的 SQL 写法,性能降低100倍,你学会了吗?

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 14 分钟 来自 juejin cn post 6844903998974099470 1 LIMIT 语句 分页查询是最常用的场景之一 但也通常也是最容易出问题的地
  • R语言Logistic回归模型深度验证以及Nomogram绘制

    R语言Logistic回归模型深度验证以及Nomogram绘制 小易学统计 互联网医疗统计师 自立 爱家人 15 人 赞同了该文章 01 研究背景
  • openwrt解除软件包安装限制

    Openwrt解除验证限制 sed i s tdetect package t detect package g koolshare scripts ks tar install sh
  • 安卓开发笔记——关于java.lang.RuntimeException: Unable to start activity ComponentInfo{......}问题的解决方案

    笔者在实现一个消息上下轮播时 遇到APP闪退 将日志打印出来 Process com ghl intelligence PID 6557 java lang RuntimeException Unable to start activity
  • 公众号如何快速接入查题功能

    最近很多同学私信小睿 我不会编程 写代码 我怎么能做一个自己的查题公众号呢 既然这么多同学最近在问 那小睿今天就来告诉大家 调用量瞩目 首先你需要一个查题的接口 然后配置到公众号内就可以了 那么接口从哪儿来呢 当然是找小睿啦 小睿为了使大家
  • 内核自带的基于GPIO的LED驱动学习(二)

    2 分析平台驱动的probe函数 好 既然这个LED驱动使用的是平台驱动框架 当设备和驱动匹配上之后 就会执行指定的probe函数 那接下来的工作就转移到分析对应的probe函数了 为了直观 我把probe函数也粘贴上来 static in
  • 【计算机网络】湖科大微课堂笔记 p2-p3 因特网概述、三种交换方式

    视频 计算机网络已从通信基础设施发展成重要的信息服务基础设施 因特网概述 网络 互联网和因特网的概念 理解 因特网发展的三个阶段 了解 因特网的标准化工作 了解 因特网的组成 理解 网络 互联网和因特网的概念 理解 左图是网络 右图是互联网
  • 转:《C++ Templates》读书笔记

    有三种模板参数 形参 1 类型参数 这是使用得最多的 2 非类型参数 3 模板的模板参数 类型参数 类型参数是通过关键字typename或者class引入 关键字后面必须是一个简单的标识符 后面用逗号来隔开下一个参数声明 等号代表接下来的是
  • U盘病毒 hypertrm.exe 修复

    1 最近电脑中了这种病毒 没有直观的感觉 不会蓝屏 也不会有其他任何异样 恶心的是他在我每次插入U盘的时候会提示INF默认安装 我没有对病毒样本做分析 感觉他只是创建了系统钩子 导致我尽管杀掉了u盘里所有的病毒 再次插上一切还会重来 2 解
  • String转字节数组

    Java语言中字符串类型和字节数组类型相互之间的转换是经常发生的 网上的分析以及代码也比较多 本文将分析分析常规的byte 和String之间的转换 1 String转byte 就是调用String类的getBytes 方法 如果没有带参数
  • 企业微信中授权小程序

    授权的时候先判断当前小程序运行环境 使用企业微信专有接口wx getSystemInfo if res environment wxwork 企业微信环境 wx qy login 获取企业微信派发的临时登录凭证 success res gt
  • PCL 计算点云的主曲率

    目录 一 算法原理 1 算法源码 2 特别提醒 3 曲率显示 二 代码实现 三 结果展示 四 测试数据 一 算法原理 1 算法源码 template
  • 用消息队列实现AB进程随时通信,在共享内存中循环逆置打印字符串

    一 要求实现AB进程随时对话 A进程发送一句话给B进程 B进程接收后打印 B进程回复一句话给A进程 A进程接收后打印 随机重复1 2步骤 当收到quit后 要结束AB进程 A进程 include
  • Python 爬取高校历年分数线

    最近一周一直在帮家里小弟看高考志愿 所以更新的没那么频繁了 请大家见谅 在看各高校的往年分数时 忍不住手痒 想着能不能给它爬下来 哈哈 说干就干 1 流程分析 之前无意中在这个网站发现有各个高校的历年录取分数线 https gkcx eol
  • 绕过过滤的空白字符

  • R语言-用stringr包处理字符串

    1 字符数统计和字符翻译 1 1 nchar和length nchar这个函数简单 统计向量中每个元素的字符个数 注意这个函数和length函数的差别 nchar是向量元素的字符个数 而length是向量长度 向量元素的个数 x lt c