C&C++常用方法笔记 -常用字符串操作

在下列文字中会使用如下函数

printf()//打印

sizeof(获取大小的对象)//获取大小

atoi(要转换成int的对象) //字符串转换

strtod(将字符串转换成浮点数)

strcmp(字1,字2)//字符串比较

strstr(包含对象,包含字段)//包含

strlen(字符串)//检测字符串长度

strcpy(cpy, str);// str 会 copy 到 cpy 里面

strcat(cpy, str);//拼接

substr(str,0,5);//截取 长度0-5的字符

tolower(ch)//大写转小写

#include

#include

#include

#include

1.字符串定义

void main(){

// 第一种 字符串数组

char str[] = {'D','a','r','r','e','n','\0'};

str[2] = 'y';

printf("%s\n",str);// 字符串结尾是 '\0'

// 第二种

char *str1 = "Darren";

str1[2] = 'y';

printf("%s", str1);

// 区别,一个能修改一个不能修改

getchar();

}


2.长度获取方法 sizeof

int strlen_(char *str){

// 怎么获取字符串的长度? 不断读取字符,判断末尾 '\0'

int len = 0;

while (*str != '\0')

{

len++;

str++;

}

return len;

}

// 字符串长度获取

void main(){

char *name = "Darren is";

char str[] = { 'D', 'a', 'r', 'r', 'e', 'n', '\0','i','s' };

// 怎么获取长度?有一种方式计算(不好使)

// printf("length is %d",sizeof(str)/sizeof(char));

printf("name length is %d\n", strlen(str));

// 自己来写一个方法读取字符串的长度

// strlen_(name);

printf("name length is %d", strlen_(str));

getchar();

}

3 字符串的转换

1.int/float to string/array:

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。

● itoa():将整型值转换为字符串。

● ltoa():将长整型值转换为字符串。

● ultoa():将无符号长整型值转换为字符串。

● gcvt():将浮点型数转换为字符串,取四舍五入。

● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。

● fcvt():指定位数为转换精度,其余同ecvt()。

除此外,还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢

2. string/array to int/float

C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。

● atof():将字符串转换为双精度浮点型值。

● atoi():将字符串转换为整型值。

● atol():将字符串转换为长整型值。

● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。


void main(){

// char * num = "1"; -> int float double

// char *num_str = "12.0xxx";

// int number = atoi(num_str);// 如果不能转换就是 0 ,后面如果有其他不是数字的就会被剔除 12xxx -> 12

// char *num_str = "12.5f";

// float number = atof(num_str);// 如果不能转换返回的是默认值 0.000000

char *num_str = "12.5xx";

double number = strtod(num_str, NULL);

printf("number is %lf",number);

getchar();

}

4字符串的比较 strcmp

C/C++函数,比较两个字符串

设这两个字符串为str1,str2,

若str1=str2,则返回零;

若str1

若str1>str2,则返回正数。

matlab中函数,strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false


void main(){

char* str1 = "Darren is";

char* str2 = "darren";

// 大于小于等于

// int rc = strcmp(str1, str2);// 区分大小写比较

// int rc = _strcmpi(str1, str2);// c strcmpi c++ _strcmpi , andrroid ndk strcasecmp

// 比较前几个

// int rc = strncmp(str1, str2,7);// count 代表的是比较字符串前几个是否相等

int rc = _strnicmp(str1, str2, 6);

if (rc == 0){

printf("相等");

}

else{

printf("不相等");

}

getchar();

}

5 字符串查找,包含 strstr

包含文件:string.h

函数名: strstr

函数原型:

1externchar*strstr(char*str1, constchar*str2);

语法:

1* strstr(str1,str2)

str1: 被查找目标 string expression to search.

str2: 要查找对象 The string expression to find.

返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。

void main(){

char* str = "name is Darren";

char *substr = "not";

char* pos = strstr(str, substr);// 返回的是字符串第一次出现的位置(位置指针), 如果没有找到返回的是空

// 求一下位置 int 怎么办? strstr

// int postion = pos - str;

// printf("第一次出现的位置是:%d\n",postion);

// 包含?pos 是不是空就可以了

if (pos){

printf("%s", "包含");

}

else{

printf("%s", "不包含");

}

getchar();

}

6 拼接,截取,大小写转换

void main(){

// strcpy(); copy进来

char* str = "darren";

char *str1 = " is";

// char* str1 = "is";

int len = strlen(str);// cpy[len] android studio 是可以的

char cpy[20];

// str 会 copy 到 cpy 里面

strcpy(cpy, str);

printf("%s\n",cpy);

// 拼接

strcat(cpy,str1);

printf("%s", cpy);

getchar();

}

char * substr(char * str,int start,int end){

// 开辟一个字符串去存储我们的数据,开辟多大计算

// char sub[end-start];

int len = end - start;

char* sub = (char*)malloc(len*sizeof(char)+1);// 记得加上1 ,在 NDK 一般会采用静态的数组存储 char sub[len]

// malloc 一定要 free

// 遍历赋值

str += start;

for (int i = 0; i < len; i++)

{

sub[i] = *str;

str++;// 指针往后逻一位

}

// 标记字符串结尾,否则 print 无法判断结尾

sub[len] = '\0';

printf("%p\n",sub);

// free(sub);

return sub;

}

7 字符串的截取 substr

void main(){

char *str = "Darren is";

// 截取第三个位置到第五个位置 3,5

char *sub = substr(str,0,5);

printf("%p\n", sub);

printf("%s",sub);

// 一定要 free ,因为你的 substr 有动态开辟内存,但是真正开发过程中并不会这么做,自己的方法尽量要自己处理好内存

free(sub);

getchar();

}

// dest 用来存放结果,大小自己指定

// source 需要转换的字符串

void lower(char* dest,char* source){

while (*source != '\0'){

// 拿当前字符

char ch = *source;

// 转完赋值给 dest

*dest = tolower(ch);// a -> a A -> a

// 接着指针 ++ ,遍历下一个

source++;

dest++;

}

// 标记字符串结尾

*dest = '\0';

}

8 大小写转换 lower

void main(){

char* name = "daRRen";

char dest[20];

lower(dest,name);

printf("%s",dest);

getchar();

}

*/

你可能感兴趣的:(C&C++常用方法笔记 -常用字符串操作)