在下列文字中会使用如下函数
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 <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
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<str2,则返回负数;
若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();
}
*/
网友评论