字符串

字符串是以(\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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值