字符串是以(\0)结尾的零个或多个字符序列。c中没有字符串这个数据类型。只能通过字符数组(允许修改)或字符指针(不允许修改)来存储字符串变量
字符串拷贝。以数组的形式将字符串输出
利用数组
void Mystrcpy(char *des,const char *src)//const不允许修改src的值
{
int i;
for( i=0;i!='\0';i++)
{
des[i]=src[i];//src[i]==*(src+i)可以把指针写成下标的样子 数组中括号自带解引用
}
des[i]='\0';//字符串结束的标志加上
}
利用指针
void Mystrcpy(char *des,const char *src)
{
while(*src!='\0')
{
*des=*src;
des++;
src++;
}
*des='\0';
}
int main()
{
char *str1 = "hello";
char str2[10];
//char*str2="abcdef";//这是四个字节的指针变量,是一个字符串常量,这个形式的字符串是不允许被修改的
Mystrcpy(str2,str1);
printf("%s",str2);
}
字符数组的基本形式为:char arr[5]={'a','b','c','d','e'};为一般的数组初始化的方式,如果改成char arr[6]={'a','b','c','d','e','\0'}就是一个数组风格的字符串。完全等价于 char*arr="abcde";
c语言 字符串的两种初始化方式
1、char *str1 = "hello";
2、char str2 [ ]= "hello";
形式1为字符串常量不允许被修改
C字符串定义时可以用"="号进行初始化,但是以后不能用"="对C字符串进行赋值。
char str1[20];
str1=" hello world!" ; //error
初始化后可以进行单个赋值
使用字符指针来访问一个字符串,通过字符指针指向存放字符串数组的首元素地址来进行访问.
char * a ="hello!" ;
但在这可以:char * a ;
a="hello!" ; //正确
用字符指针指向一个字符串,但他依然是用字符数组存储的,这里只是把字符串首地址赋值给a,a是四个字节的指针变量
这里是一个字符串常量,所以只能读,不能写
int main()
{
char*str1="hello";//为字符串常量不允许被修改
char str2[]="hello";//可以修改
printf("%s\n",str2);//输出的是整个字符串
//char str[]="hello";
//char str[20];
//str="hello";//不可以用=对c 字符串 进行赋值
//str[0]='h';//初始化后可以进行单个赋值
//char *a="hello";
char *a;
a="hello";//这里可以整体赋值
//*a='p';//错误 内存不允许被修改
//a[0]='p';//错误 内存不允许被修改
a="s";
printf("%s\n",a);
//char *a="hello";
//printf("%c\n",a[0]);//第一个字符 a[1]为第二个字符
//printf("%c\n",*a);
//printf("%s\n",a);//输出的是整个字符串
return 0;
}
itoa为c语言的一个函数,itoa函数是一个广泛应用的从非标准扩展到标准的c语言,他不能被移植,因为它不是标准定义下的c语言。itoa取整数输入值,并将其转换为相应进制数字的字符串
char * itoa(int value,char *string,int radix)
value:欲转换的数据 string:目标字符串的地址 radix:转换后的进制数,可以是10进制16进制等
返回值:为指向这个字符串的指针
#include<stdio.h>
#include<stdlib.h>
//itoa 整型转字符串(包括负数)
//先统计这个数字是几位数
int num_Length(int num)
{
int length=0;
if(num<0)
{
num*=-1;
while(num)
{
num=num/10;
length++;
}
return length+1;//负数转字符串+符号位
}
else
{
while(num)
{
num=num/10;
length++;
}
return length;
}
}
//把数字存到一个字符数组中 申请比数字位数多1 的字符数组
//下一步将数组的最后一个str+pos置为'\0' 再将数字一个个转成字符 从右往左依次存放到数组中
char *itoa(int num)
{
int pos=0;
int length;
static char *str=(char*)malloc(num_Length(num)*sizeof(char)+1);
if(str==NULL)
{
printf("内存申请失败\n");
}
length=num_Length(num);
pos=length;
*(str+pos)='\0';//字符串
pos--;
if(num<0)
{
num*=-1;
while(num)
{
*(str+pos)=(num%10)+'0';//取到整数的最后一位数 +'0'变成字符
num=num/10;
pos--;
}
*str='-';//负数最低位加上-号
}
else
{
while(num)
{
*(str+pos)=(num%10)+'0';//数字转换成字符+'0'
num=num/10;
pos--;
}
}
return str;//返回的是整个字符串 str是首字符的地址 *str指的是字符串的首字符 是一个整型的数据
}
int main()
{
int number=0;
scanf_s("%d",&number);
printf("%s",itoa(number));
return 0;
}
直接使用itoa函数
#include<stdio.h>
#include<stdlib.h>
int main()
{
int number=12345;
char string[7];
itoa(number,string,10);
printf("integer=%d string=%c\n",number,string[0]);
printf("integer=%d string=%s\n",number,string);
return 0;
}
字符串转整数
#include<stdio.h>
#include<stdlib.h>
//字符串转整数
int atoi(char* string)
{
int i=0;
int sum=0;
while(string[i])
{
sum=sum*10+(string[i]-'0');
i++;
}
return sum;
}
int main()
{
char *string="1234";
printf("%d\n",atoi(string));
return 0;
}