我想要一個字符串,看看它是否可以轉換成十進制/浮點/八進制/十六進制將字符串轉換爲十進制,不適用於某些情況?
我已經將這些字符串存儲到一個數組中,並通過它們遍歷並檢查哪些元素是什麼。
for(int k=0;k<i;k++){
char* string = tokenArray[k];
fprintf(newFile, "Tokens are: %s\n", string);
if(checkDecimal(string) == 1){
result[k] = "Decimal"; printf("Token: %s is %s\n", string, result[k]);
}
else if(checkFloat(string) == 1){
result[k] = "Float"; printf("Token: %s is %s\n", string, result[k]);
}
else if(checkHex(string) == 1){
result[k] = "Hex"; printf("Token: %s is %s\n", string, result[k]);
}
else if(checkOctal(string) == 1){
result[k] = "Octal"; printf("Token: %s is %s\n", string, result[k]);
}
else {
printf("Token: %s Did not work\n", string);
}
我寫陣列的內容到一個單獨的文件,該文件是,:
fprintf(newFile, "Tokens are: %s\n", string);
令牌是:012
令牌是:23948個
令牌是:1.21E + 19
代幣有:[
令牌是:,
令牌是:0
令牌是:0x56儲存
令牌是:888
令牌是:0X11
令牌是:12
代幣有:333
令牌是:234
令牌是:012
令牌是:12
令牌是:01200
正如你能看到我的正確獲得令牌,但我的輸出快到了奇怪的。
這是我的檢查元素代碼:
int checkFloat(char *s){
char *str = NULL;
long i = strtol(s, &str, 0);
if (!*str)
return 0;
if (*str == 'e' || *str == 'E' || *str == '.')
return 1;
return 0;
}
int checkHex(char *s){
char *str = s;
if((*str) == '0'){
if((*(str++) == 'x')){
printf("%s\n", "olala");
}
}
if(*(str) == 0 && (*(str++) == 'x' || *(str++) == 'X'))
{
printf("%s\n", "ok");
while(*(str) != '\0')
{
if (!isxdigit(*str))
{
return 0;
}
++str;
}
return 1;
}
return 0;
}
int checkOctal(char *s){
char *str = s;
if (*str != '0')
{
return 0;
}
while (isdigit(*str) && *str != '8' && *str != '9')
{
if(*(++str) == '\0')
{
return 1;
}
str++;
}
return 0;
}
int checkDecimal(char *s){
char *str = s;
if(*str == '0')
return 0;
for(int i=0;i<strlen(str);i++){
if(str[i] < 49 || str[i] > 57)
return 0;
}
return 1;
}
我認爲,這些功能都很好,
這是輸出:
令牌:012是八
令牌: 23948是十進制
令牌:1。21E + 19 是浮法
令牌:沒有工作
令牌:,沒有工作
令牌:0是八路
令牌:0x56儲存沒有工作
令牌:888是十進制
令牌:0X11 沒有工作
令牌:12是十進制
令牌:333是十進制
令牌:234 沒有工作
令牌:012 沒有工作
令牌:12是十進制
令牌:01200是八進制
As你可以看到,第一個令牌是012,它以八進制(罰款)形式出現。另一個相同的標記012出來的錯誤。與「234」相同。
我不知道爲什麼我的十六進制數字劑量工作。
Plz help
請花一些時間學習如何使用調試器。 – OldProgrammer
我不打算調試你的代碼,但你可以這樣做,看看會發生什麼。你可能會發現錯誤。如果相同的數字不會產生相同的結果,那麼您可能不會重新初始化每個新行的讀取指針,並且如果0x12不起作用,那麼您可能不會將讀取指針前進到應該出現的位置,或者您推進它不應該在的地方。但你必須自己找出IMO。使用一個好的調試器。 –
注意:你的十六進制代碼是複雜的。首先檢查「0x」或「0X」,然後檢查其餘部分。注意'0!='0',但是'0 =='\ 0''。 –