这篇文章涉及到字符串与指针知识点的相关练习。浮点数与字符串互转、字符串拷贝、字符串比较、指针交换变量、指针优先级、数据类型强制转换、内存拷贝函数等。
1. 浮点数转字符串
将字符串转整数、整数转字符串、浮点数转字符串、字符串转浮点数 封装为函数。
浮点数转字符串:
#include
#include //字符串处理
void float_to_string(char str[],float data);
int main(void)
{
char buff[50];
float data=1234.5;
float_to_string(buff,data);
printf("data=%f,buff=%s\n",data,buff);
return 0;
}
/*
函数功能: 浮点数转字符串
*/
void float_to_string(char str[],float data)
{
int buff[50];
int int_data1=data; //提取整数部分
int int_data2=(data-int_data1)*1000000; //提取小数部分
int i=0,j=0,k=0;
//转整数部分
while(int_data1)
{
buff[i]=int_data1%10+'0';
int_data1=int_data1/10;
i++;
}
//倒序
for(j=0;j=0; j--)
{
if(str[j]=='0')str[j]='\0'; //添加结束符
else break;
}
}
;j++)>
2. 封装字符串拼接函数
封装字符串拼接函数:
函数功能实现将a和b字符串拼接在一起。
比如: char a[100]=”123”; char b[]=”456”; 调用函数之后: a[]=”123456”
#include
#include //字符串处理
void my_strcat(char str1[],char str2[]);
int main(void)
{
char str1[50]="12345";
char str2[]="67890";
//strcat(str1,str2); //字符串拼接
my_strcat(str1,str2); //字符串拼接
printf("%s\n",str1);
return 0;
}
/*
函数功能:字符串拼接
*/
void my_strcat(char str1[],char str2[])
{
int i=0,len=0;
while(str1[len]!='\0')
{
len++;
}
while(str2[i]!='\0')
{
str1[len+i]=str2[i];
i++;
}
str1[len+i]='\0'; //结尾补上'\0'
}
3. 封装字符串的拷贝函数
封装字符串的拷贝函数: 将a字符串拷贝到b字符串。
示例:
#include
#include //字符串处理
void my_strcpy(char str1[],char str2[]);
int main(void)
{
char str1[50]="12345";
char str2[]="67890";
//strcpy(str1,str2); //字符串拷贝
my_strcpy(str1,str2);
printf("%s\n",str1);
return 0;
}
/*
函数功能:字符串拼接
*/
void my_strcpy(char str1[],char str2[])
{
int i=0,len=0;
while(str2[i]!='\0')
{
str1[i]=str2[i]; //依次赋值
i++;
}
str1[i]='\0'; //补上结尾符号
}
4. 封装字符串的比较函数
封装字符串的比较函数: 比较a字符串和b字符串是否相等。 通过返回值进行区分。
示例:
#include
#include //字符串处理
int my_strcmp(char str1[],char str2[]);
int main(void)
{
char str1[50]="中国";
char str2[]="中国";
int a;
//a=strcmp(str1,str2);
a=my_strcmp(str1,str2);
if(a==0)printf("字符串相等!\n");
else printf("字符串不相等!\n");
return 0;
}
/*
函数功能:字符串比较
*/
int my_strcmp(char str1[],char str2[])
{
int i=0;
//只要有一个数组没结束就继续
while(str1[i]!='\0'||str2[i]!='\0')
{
if(str1[i]!=str2[i])break;
i++;
}
if(str1[i]=='\0' && str2[i]=='\0')return 0; //相等
else return -1; //不相等
}
5. 指针特性
指针: 是C语言的灵魂。
指针: 可访问计算机的底层----->硬件。
定义指针的语法: <数据类型> *<变量名称>;
int *p;
指针的特性:
(1)指针本身没有空间。int *p; //定义一个指针变量
(2)指针本身就是地址(专门保存地址)。int *p; p=? ?必须是地址类型。
int *p; //定义一个指针变量
int data=123;
//p=123; //错误赋值方式
p=&data; //正确的赋值方式
(3)取出指针指向地址的数据
int *p; //定义一个指针变量
int data=123;
p=&data; //正确的赋值方式
printf("%d\n",*p); //取出p指针指向空间的值
//*p=888;
(4)指针类型的变量都是占4个字节
#include
int main()
{
int *p1; //定义一个整型指针变量
char *p2;
float *p3;
double *p4;
printf("int=%d\n",sizeof(p1));
printf("char=%d\n",sizeof(p2));
printf("float=%d\n",sizeof(p3));
printf("double=%d\n",sizeof(p4));
return 0;
}
(5)指针支持自增和自减 ++ --
#include
int main()
{
char *p;
char str[]="1234567890";
p=str; //将数组地址赋值给指针p
//指针可以直接使用数组下标(指针可以当数组名使用)
printf("%c\n",p[0]);//1
printf("%c\n",p[1]);//2
//通过指针访问数组的成员
printf("%c\n",*p); //1
p++; //指针自增
printf("%c\n",*p); //2
p--;
printf("%c\n",*p); //1
return 0;
}
(6) 不同类型的指针自增和自减的字节数
//指针类型自增和自减的字节数与本身数据类型有关。
#include
int main()
{
int data1[10];
char data2[10];
/*1. 给指针赋值合法的空间*/
int *p1=data1;
char *p2=data2;
printf("0x%X\n",p1);
p1++;
printf("0x%X\n",p1);
printf("0x%X\n",p2);
p2++;
printf("0x%X\n",p2);
return 0;
}
6. 通过指针交换两个变量的值
#include
void func(int *a,int *b);
int main()
{
int a=100,b=200;
func(&a,&b);
printf("a=%d,b=%d\n",a,b); //200,100
return 0;
}
//通过指针交换两个变量的值
void func(int *a,int *b)
{
int c;
c=*a; //取出100
*a=*b; //取出200赋值给a
*b=c;
}
7. 指针自增优先级
#include
int main()
{
char buff[]="12345";
char *p=buff;
printf("%c\n",*p); //1
printf("%c\n",*p++); //1
printf("%c\n",*p++); //2
printf("%c\n",*p); //3
return 0;
}
8. 计算字符串的长度
#include
int my_strlen(const char *str);
int main()
{
printf("%d\n",my_strlen("1234567"));
return 0;
}
//加const为了防止不小心修改了数据
int my_strlen(const char *str)
{
//*str='1'; //错误,不能赋值
char *p=str; //保存地址
while(*p!='\0')p++;
return p-str; //得到字符串长度
}
9. 数据类型的强制转换
数据类型的强制转换 (欺骗编译器)
char *p1=(char*)src;
char *p2=(char*)new;
10. 编写一个内存拷贝函数
功能: 可以将任何数据的类型进行相互赋值。
int a,b=100; float a,b=123.456; ………..
#include
void my_memcpy(void *new,void *src,int len);
int main()
{
//int data1=123,data2=456;
//my_memcpy(&data1,&data2,4);
//printf("data1=%d\n",data1);
int data1[100];
int data2[50]={12,34,5,6,78};
my_memcpy(data1,data2,sizeof(data2));
printf("%d\n",data1[0]);
printf("%d\n",data1[1]);
return 0;
}
/*
内存拷贝
将src的数据拷贝到new,拷贝len
*/
void my_memcpy(void *new,void *src,int len)
{
char *p1=(char*)src;
char *p2=(char*)new;
int i;
//for(i=0; i;>
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7588浏览量
135734 -
字符串
+关注
关注
1文章
567浏览量
20455 -
指针
+关注
关注
1文章
477浏览量
70488
发布评论请先 登录
相关推荐
用指针实现字符串拷贝的程序和字符型指针变量与字符数组的区别说明
字符串是存放在字符数组中的,对字符数组中的字符逐个处理时,前面介绍的指针与数组之间的关系完全适用于字符
发表于 11-05 16:15
•2次下载
C语言-字符串处理
字符串在C语言里使用非常多,因为很多数据处理都是文本,也就是字符串,特别是设备交互、web网页交互返回的几乎都是文本数据。 这篇文章就介绍字符串
评论