以下是字符串比較函數(shù)的實現(xiàn):
#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 ++;
//如果有一個字符串結(jié)束啊掏,則返回
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>
//存儲小數(shù)位數(shù)
int decimalMax = 0;
//將字符串轉(zhuǎn)換為浮點數(shù)
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;
//正式開始循環(huán)遍歷字符串前蝶押,先檢查是否存在一些除空格,+ - 之外的非數(shù)字字符,如果存在肮疗,則返回0
for(; a[j] != '\0'; j ++)
{
if((a[j] < '0' || a[j] > '9') && a[j] != ' ' && a[j] != '+' && a[j] != '-' && a[j] != '.')
{
return 0.0;
}
}
//開始循環(huán)遍歷字符串融涣,依次遇到 空格,數(shù)字表锻,小數(shù)點恕齐,數(shù)字,則開始轉(zhuǎn)換
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' 即將字符轉(zhuǎn)為數(shù)字瞬逊,此處為int型
decimal = decimal + (a[i] - '0') / power;
decimalMax ++;
power *= 10;
}
return sign * (digit + decimal);
}
int main(int argc,char *argv[])
{
//經(jīng)試驗显歧,最多可保存小數(shù)位數(shù)為15位,輸出-93.919191196786784000000000确镊,不精確
//double是一個近似值士骤,通常沒有辦法做的很精確.通常能精確到小數(shù)點后面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;
}