【CAPL】字符串相关函数

strlen()字符串的长度

On key 'c'                
{
  char buffer[100] = "CANalyzer";                
  Write("strlen:%d",strlen(buffer));                
  Write("elCount:%d",elCount(buffer));                
}
  • strlen 结果是实际的字符串长度
  • elCount 结果是数组的定义长度

输出: strlen:9 elCount:100

strncat()将源字符串拼接到到目的字符串后面

注意“\0”也占用一个字节。

On key 'c'     
{
  int i ;     
  char s[10];     
  for(i=0;i<12;i++)     
  {
      strncpy(s, "12345", 10); // 初始化字符串数组 s = "12345"     
      strncat(s, "7890", i); //  根据指定长度参数拼接 字符串     
      write("i = %d  s = %s",i,s);     
  }
}

输出:

i = 0 s =
i = 1 s =
i = 2 s = 1
i = 3 s = 12
i = 4 s = 123
i = 5 s = 1234
i = 6 s = 12345
i = 7 s = 123457
i = 8 s = 1234578
i = 9 s = 12345789
i = 10 s = 123457890
i = 11 s = 123457890

从输出可以看出,指定的长度参数可以大于将输出的字符串长度正常显示,小于的话,从前往后截取。

strncmp() 字符串数组比较

在这里插入图片描述

On key 'c'     
{
    char s1[8] = "123456";     
    char s2[8] = "223456";     
    char s3[8] = "1234561";     
    char s4[8] = "12345";     
    char s5[8] = "123456";     
    write("s1:s2 = %d",strncmp(s1,s2,100));     
    write("s1:s3 = %d",strncmp(s1,s3,100));     
    write("s1:s4 = %d",strncmp(s1,s4,100));     
     write("s1:s5 = %d",strncmp(s1,s5,100));     
}

输出:
s1:s2 = -1
s1:s3 = -1
s1:s4 = 1
s1:s5 = 0

函数的机制是:逐个字符比较,遇见不同的字符,比较其ASCII值,然后返回值。

long strncmp_off(char s1[], long s1offset, char s2[], long s2offset, long len);

相比strncmp ,strncmp_off 多了个offset参数
在这里插入图片描述

On key 'c'     
{
    char s1[8] = "123456";     
    char s2[8] = "456";     
    write("s1:s2 = %d",strncmp_off(s1,3,s2,0,100));//s1[3:结束]和S2比较
}

输出:
s1:s2 = 0

strncpy() 把源字符串拷贝到目的字符串数组

拷贝长度由len参数决定,拷贝过程会覆盖目的字符串数组原来内容。

[图片]

On key 'c'     
{
    char s1[20] = "123456";     
    char s2[8] = "789";     
    strncpy(s1,s2,elCount(s1));     
    write("s1 = %s",s1);     
    //清空字符串     
    strncpy(s1,"",elCount(s1));     
    write("s1 = %s",s1);     
}

输出:
s1 = 789
s1 =

void strncpy_off(char dest[], long destOffset, char src[], long max);

相当于 strncpy 和 strncat 的结合

[图片]

On key 'c'     
{
  int i;     
char s1[20] = "123456";     
char s2[8] = "789";     
  for(i=0;i<strlen(s1) + 1;i++)  //strlen(s1) + 1 = 6

  {   
    strncpy_off(s1,i,s2,elCount(s1)); //根据offset 参数拷贝S2到S1
    write("s1 = %s",s1);     
    //初始化s1字符串数组     
    strncpy(s1,"123456",elCount(s1));     
  }
}

输出:
s1 = 789 //i=0
s1 = 1789 //i=1
s1 = 12789
s1 = 123789
s1 = 1234789
s1 = 12345789
s1 = 123456789 //i=5

strstr()搜索字符串

搜索到结果返回索引的位置。搜索到第一个匹配结束。

[图片]

On key 'c'     
{
    long pos;     
    char s1[18] = "hello world";     
    char s2[11] = "world";     
    write("pos:%d",strstr(s1, s2));     
    write("pos:%d",strstr(s1, "l"));     
}

输出:
pos:6
pos:2

long strstr_off(char s1[], long offset, char s2[]);

规定被搜索的字符串数组位置。

On key 'c'     
{
    long pos,i;     
    char s1[18] = "hello world";     
    char s2[11] = "world";     
    for(i=0;i<strlen(s1)+1 ;i++)     
    {
      write("pos:%d",strstr_off(s1, i,"l"));     
    }
 }

输出:
pos:2
pos:2
pos:2
pos:3
pos:9
pos:9
pos:9
pos:9
pos:9
pos:9
pos:-1
pos:-1

str_replace()搜索并替代字符串

![[图片](https://img-blog.csdnimg.cn/direct/1fc11e0a8dbf48f1bdb3cd93ee5db46e.png)

On key 'c'     
{
    long pos,i;     
    char s1[18] = "12121212";     
    char s2[11] = "world";     
    str_replace(s1, "1", "3");     
    write("s1:%s",s1);     
}

输出:
s1:32323232

long str_replace(char s[], long startoffset, char replacement[], long length); // form 2

用另一个字符串替代被搜索的字符串的一部分,注意期望的结果字符串数组大小不能大于被搜索的字符串数组

On key 'c'     
{
    long pos,i;     
    char s1[18] = "12345678";     
    str_replace(s1,4, "asdfg",strlen(s1));//form2 ,从索引4后面的字符串被"asdfg"替代
    write("s1:%s",s1);     
}

输出:
s1:1234asdfg

substr_cpy()拷贝源字符串的子字符串到目的字符串

[图片]

On key 'c'     
{
long pos,i;     
char s1[18];     
char s2[18] = "12345678";     
for(i=0;i<5;i++)     
{
substr_cpy(s1, s2, i, 4, elcount(s1));      
write("s1:%s",s1);     
}

输出:
s1:1234
s1:2345
s1:3456
s1:4567
s1:5678

#void substr_cpy_off(char dest[], long destOffset, char src[], long srcStart, long len, long max)
拷贝源字符串的子字符串到目的字符串,相当于把源字符串的子字符串和目的子字符串 拼接在一起

[图片]

On key 'c'     
{
    long pos,i;     
    char s1[18] = "abcdefg";     
    char s2[18] = "12345678";     
    for(i=0;i<5;i++)     
    {
    substr_cpy_off(s1,i, s2, i, 4, elcount(s1));      
    write("s1:%s",s1);     
    strncpy(s1,"abcdefg",elCount(s1));     
}

输出:
s1:1234
s1:a2345
s1:ab3456
s1:abc4567
s1:abcd5678

swapWord()高低位切换

[图片]

On key 'c'     
{
  
    write("Word:%x",swapWord(0x1234));     
    write("int:%x",swapInt(0x1234));     
    write("dword :%lx",swapDWord(0x12345678));     
    write("long :%lx",swapLong(0x12345678));     
    write("int64 :%I64x",swapInt64(0x1234567890876543LL));// 8个字节的整形,后面必须有"LL"后缀
    write("qword :%I64x",swapQWord(0x1234567890876543LL));
}

输出:
Word:3412
int:3412
dword :78563412
long :78563412
int64 :4365879078563412
qword :4365879078563412

toLower()将输入字符或者字符串转换成小写

On key 'c'     
{
    char s[20];     
    write("s :%c",toLower('A'));  // form1  ,转换单个字符     
    toLower(s, "aSdFgH", elcount(s)); // form2 ,转换字符串
    write("s :%s",s);     
}

输出:
s :a
s :asdfgh

toUpper()将输入字符或者字符串转换成大写

用法参考 toLower

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值