前言:
笔试题基本上必考题之一:字符串的处理,涉及到指针、数组、以及字符串数组;近几日的笔试字符串处理让我无从下手,因此根据近几日的笔试题,总结了一波常见的操作;
1.整数与字符数字互换类型:
void char_to_int( char *buf, int *num,int size) //字符串换成数字
{
int i = 0;
int temp = *num;
if( buf == NULL || num == NULL || size <=0)
{
printf("Error:error arg\n");
return ;
}
while( buf[i] != 0 ) //遍历跳出条件:当碰到0退出循环就是'\0'=0
{
temp = temp*10 + (buf[i] - '0'); //利用字符减字符的ASCII值获得int类型值后,通过累乘10来表示十进制当中的个、十、百位;
i++;
}
*num = temp;
}
void int_to_char( int num,char *buf,int size) //数字换成字符串
{
int i = 0,j = 0;
char temp[size];
while(num) //遍历跳出条件:判断数字是否为0
{
temp[i] = num%10 +'0'; //对各个位进行取余,从而取得各个位上0~9的数值,在通过加上字符'0'的ASCII值进行相加,化成对应'0'~'9'的ASCII值
i++;
num = num/10; //获取个、十、百位
}
temp[i] = 0; //当跳出循环时,字符串必须以\0结尾,而0 = '\0',并且到这里时这个字符串是逆序的,需要调整为正序;
while(i >= 0) //调为正序
{
buf[j] = temp[i-1];
j++;
i--;
}
buf[j] = 0; //同样给字符串进行结尾
}
注:需要强调的是,函数传参是按值传递,所以你想保存则需要指针的协助,让其按地址传递;或者,可以通过函数的返回值来存储到相应的函数区;
注:这个例题可以辅助剑指offer里面的面试案例(关于字符串转换)一起食用,效果更佳;
2.字符串复制函数问题:
功能:将src所指向的字符串覆盖到dest所指向的字符串:比如,src:123 dest:12 返回12
char *strcopy(char *dest, const char *src)
{
if( dest == NULL || src == NULL )
{
printf("Error:error arg\n");
return NULL;
}
while( *dest != 0 || *src != 0 )