int strindex(char s[] , char t[])
{
int i , j , k , coordinate = -1;
for(i = 0; s[i] != '\0'; i ++)
{
for(j = 0 , k = i; t[j] != '\0' && s[k] == t[j] ;j++ , k++)
;//从第相同字母开始判定到'\0'前
if(j > 0 && t[j] == '\0')
coordinate = i ;
}
return coordinate ;
}
123.45e-6
的科学表示法,其中,浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负)aotf函数如下
double atof(char s[])
{
int sign , i ;
double sum , xiaoshu;
i = 0 ;
sign = (s[i] == '-') ? -1 : 1 ; //储存符号
if(s[i] == '+' || s[i] == '-')
i ++ ;
for(sum = 0.0; isdigit(s[i]) && s[i] != '.'; i++)
{
sum = sum *10.0 + (s[i] - '0');
}
//当遇到小数点
if(s[i] == '.')
i++ ;
for(xiaoshu = 1.0; isdigit(s[i]); i++)
{
sum = sum * 10.0 + (s[i] - '0') ;
xiaoshu *= 10.0 ;
}
return sign * sum / xiaoshu ;
}
扩充后
double atof(char s[])
{
int sign , i , sign_SN ;//sign_SN: sign_Scientific_Notation
double sum , xiaoshu , exp;
i = 0 ;
sign = (s[i] == '-') ? -1 : 1 ; //储存符号
if(s[i] == '+' || s[i] == '-')
i ++ ;
for(sum = 0.0; isdigit(s[i]) && s[i] != '.'; i++)
{
sum = sum *10.0 + (s[i] - '0');
}
//当遇到小数点
if(s[i] == '.')
i++ ;
for(xiaoshu = 1.0; isdigit(s[i]); i++)
{
sum = sum * 10.0 + (s[i] - '0') ;
xiaoshu *= 10.0 ;
}
sum = sign * sum / xiaoshu ;//科学技术法前的数字大小
//当遇到e或E;
if(s[i] == 'e' || s[i] == 'E')
{
sign_SN = (s[++ i] == '-') ? false : true ;
if(s[i] == '-' || s[i] == '+')
i ++ ;
exp = pow(10 , (double)(s[i] - '0'));
if(sign_SN)
sum *= exp ;//指数为正
else
sum /= exp ;//指数为负
}
return sum ;
}
波兰逆计算器,栈来栈的,天天栈。等我之后再来好好看一下(ko no 不是计算机专业da)直接跳过吧,划水摸鱼 珍惜时间
#include
#include
#include
using namespace std ;
/*
使用printfd的思想编写一个itoa函数,通过递归将整数转换为字符串
*/
void printd_itoa(int a , char s[]);
int main()
{
int a ;
char s[100];
cin >> a ;
printd_itoa(a , s);
printf("%s\n" , s);
system("pause");
return 0 ;
}
//将整数转换为字符串
void printd_itoa(int n , char s[])
{
static int i ;//字符串下标
if(n / 10)
printd_itoa(n / 10 , s);
else
{
i = 0; //最后一次递归,i = 0 ,为负号
if(n < 0)
s[i++] = '-' ;
}
s[i ++] = abs(n) % 10 + '0' ;
s[i] = '\0' ; //在最后一次递归调用时添上字符串结束标志符
}
是递归的内容,学习完发现,我之前对递归的理解居然是错误的
例如有一个递归的函数块
void xxx (int i )
{
A ---;
B xxx(i - 1);
c ---;
}
程序先运行A,然后进入下一个递归调用,在执行A,接着下一个递归调用…
在最后一个递归,运行C,然后返回上一个递归,运行C,直到第一个递归调用的c
#include
#include
#include
#include
using namespace std ;
/*
编写一个递归版本的reverse(s)函数,已将字符串s倒置
*/
void re_reverse(char s[]);
int main()
{
char s[100];
gets(s);
re_reverse(s);
printf("%s" , s);
system("pause");
return 0 ;
}
//将字符串倒置
void re_reverse(char s[])
{
void reverse(char s[] , int i , int len) ;
reverse(s , 0 , strlen(s));
}
void reverse(char s[] , int i , int len)
{
static int j ;
char c ;
j = len - (i + 1) ; // 去掉换行符
if(i < j)
{
c = s[i];
s[i] = s[j];
s[j] = c ;
reverse(s , ++ i , len);
}
}
普通的递归,自定义有声明了一个函数,骚操作就完事了.
#define swap(t , x , y) \
(y) = (x) + (y) - ((x) = (y))
答案
#define swap(t , x , y) \
t _z ;\
_z = x;\
x = y;\
y = _z;\