1 整数与字符串的转换 将整数转成字符串,思路之一:先计算出整数总共位数,并将字符串指针移到最后. |
char *conv(int in, char *out)
{
char *ret = out;
int len = 0;
int tmp;
if (in < 0)
{
*out++ = '-';
in = -in;
}
tmp = in;
while(tmp>0) { out++;tmp = tmp/10;}
*out = '\0';
out--;
do
{
*out--= '0' +in%10;
in = in/10;
}
while(in>0);
return ret;
}
-----------------------
另一种方法: 先转成字符串,然后将字符串整个倒序。
char *conv(int num, char *str){
int i = 0,j = 0, isneg = 0;
char tmp[10];
if(num < 0) {
isneg = 1;
num *= -1;
}
do{
tmp [i++] = (num % 10) + '0';
num /= 10;
} while (num);
if(isneg) tmp[i++] = '-';
while ( i> 0)
str[j++] = tmp[--i];
str[j] = '\0';
return str;
}
---------------------
递归方法
char* rcsv_str_from_i(int i_in,char* str_out)
{
}
---------------------------------
字符串转换成整数
int con_ctoi(char str[])
{
int ret = 0;
int isneg = 0;
int i = 0;
if(str[0] == '\0')
{
isneg = 1;
i++;
}
while(str != '\0')
{
ret *= 10;
ret += (str[i++] -'0');
}
if (isneg) ret *= -1;
return ret;
}
2 字符串逆转
void reverse(char str[]){
char tmp;
int start = 0;
int end = 0;
int i = 0;
while(str[i++] != '\0') end++;
end--;
while(end>start)
{
tmp = str[start];
str[start] = str[end];
str[end] = tmp;
start++;
end--;
}
}
考虑用指针实现
char* strrev2(const char* str)
{
char* tmp = new char[strlen(str) + 1];
strcpy(tmp,str);
char* ret = tmp;
char* p = tmp + strlen(str) - 1;
while (p > tmp)
{
char t = *tmp;
*tmp = *p;
*p = t;
--p;
++tmp;
}
return ret;
}
考虑做一些优化:主要在交换的地方做了。
while (p > tmp)
{
*p ^= *tmp;
*tmp ^= *p;
*p ^= *tmp;
--p;
++tmp;
}
while(p >tmp)
{
*p = *p + *tmp;
*tmp = *p - *tmp;
*p = *p - *tmp;
--p;
++tmp;
}
--------------------------------------------
一个利用递归实现输出逆转字符串的方法,很简洁
void rev_out(char *str)
{
if(*str != '\0')
{
rev_out(++str)
putchar(*(str-1));
}
}
char* strrev5(/*const */char* str,int len) { if (len <= 1) return str; char t = *str; *str = *(str + len -1); *(str + len -1) = t; return (strrev5(str + 1,len - 2) - 1); } |
文章评论(0条评论)
登录后参与讨论