针对“字符串问题”一篇中,数字转成字符串问题,这次进行一此更新。
数字转成字符串:1234 ->"4321" ->"1234"
itoa 的过程需要两步,他与atoi不同,不能按顺序输出。仔细观察可以发现,中间牵扯到字符串逆序问题,所以,我们可以写两个函数:字符串逆序和itoa,这两个函数。
//字符串逆序
void Reverse(char *str)
{
char tmp;
char *p = str;
//找该字符串尾巴
while(*p != '\0')
p++;
//前、后两个指针交换所指数值
for(p--;p>str;p--,str++)
{
tmp = *p;
*p = *str;
*str = tmp;
}
}
//数字转字符串(这里字符串是逆序的)
void Myitoa(char *buf,int n)
{
int i;
do{
i=0;
buf[i] = n%10+'0';
n/=10;
i++;
}while(n != 0);//这里选用do..while,为了防止n=0直接跳出
buf[i] = '\0';//字符数组中无结尾
Reverse(buf);//调用字符串逆序函数
}
冒泡排序与字符串排序
首先,冒泡排序大家都很熟悉,就是双层循环遍历交换,进行排序,得到有序数列;
//冒泡排序(下三角)
void BubbleSort(int *arr,int len)
{
int tmp;
for(int i=0;i<len-1;i++)
{
for(int j=0;j+1<len-i;j++)
{
if(arr[j]>arr[j+1])//交换
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
其次,字符串排序 ,根据冒泡排序,二者都同属数组,故而也需要双层循环遍历并交换,不过,此处需要交换的指针(单个字符),而不是整数。
在这里,大家需要注意一个事情:两个字符串常量交换(不可用字符串拷贝)
char *str1 = "hts";
char *str2 = "wtt";
//地址交换
char *p = str1;
str1 = str2;
str2 = p;
因此,字符串排序与冒泡排序还是相当相似的。
void StrSort(char **str,int len)//len=sizeof(str)/sizeof(str[0])
{
char *tmp;
for(int i=0;i<len-1;i++)
{
for(int j=0;j+1<len-i;j++)
{
if(strcmp(str[j],str[j+1])>0)//判断字符大小函数strcmp
{
tmp = str[j];
str[j] = str[j+1];
str[j+1] = tmp;
}
}
}
}
总结:
冒泡排序与字符串排序有着相似规则,不过需要注意两点:
1、参数如何传递
2、字符串如何交换
本篇结束,欢迎访问。