以下是字符串比较函数的实现:
#include<stdio.h>
int stringCmp(char a[], char b[])
{
unsigned char x,y;
unsigned char i = 0;
do
{
x = (unsigned char)a[i];
y = (unsigned char)b[i];
i ++;
//如果有一个字符串结束,则返回
if(y == '\0')
{
return x - y;
}
}while(x == y);
return x - y;
}
int main(int argc,char *argv[])
{
char a[20] = "i am good";
char b[20] = "i am bad";
printf("%d",stringCmp(a,b));
return 0;
}
改进一下:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<limits.h>
//存储小数位数
int decimalMax = 0;
//将字符串转换为浮点数
double atof(char *a)
{
int sign = 1;
//此处3个变量必须赋值为double型变量
double digit = 0.0;
double decimal = 0.0;
double power = 10.0;
int i = 0;
int j = 0;
//正式开始循环遍历字符串前,先检查是否存在一些除空格,+ - 之外的非数字字符,如果存在,则返回0
for(; a[j] != '\0'; j ++)
{
if((a[j] < '0' || a[j] > '9') && a[j] != ' ' && a[j] != '+' && a[j] != '-' && a[j] != '.')
{
return 0.0;
}
}
//开始循环遍历字符串,依次遇到 空格,数字,小数点,数字,则开始转换
for(; isspace(a[i]) ; i ++)
{
;
}
switch(a[i])
{
case '+':
i ++;
break;
case '-':
sign = -1;
i ++;
break;
default:
break;
}
for(; isdigit(a[i]); i ++)
{
if(digit > INT_MAX)
{
return 0;
}
digit = digit * 10 + a[i] - '0';
}
if(a[i] == '.')
{
i ++;
}
for(; isdigit(a[i]); i ++)
{
//a[i] - '0' 即将字符转为数字,此处为int型
decimal = decimal + (a[i] - '0') / power;
decimalMax ++;
power *= 10;
}
return sign * (digit + decimal);
}
int main(int argc,char *argv[])
{
//经试验,最多可保存小数位数为15位,输出-93.919191196786784000000000,不精确
//double是一个近似值,通常没有办法做的很精确.通常能精确到小数点后面6位,也就是说超过6位可能就不准了。
//char a[60] = " -93.919191196786781111111111";
char a[60] = {0};
double ax = 0;
//用于计算长度,将最后的换行符给替换掉
int len = 0;
printf("please input a string in 60:\n");
fgets(a,60,stdin);
len = strlen(a);
a[len - 1] = '\0';
ax = atof(a);
printf("%.*lf",decimalMax,ax);
return 0;
}