在下列文字中会使用如下函数
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(); } */