#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_STR_LEN 32
#define MAX_INT_VALUE 0xEFFFFFFF
#define LESS_ZERO 1
#define BIG_ZERO 2
int strtoint(char *pStr)
{
int i = 0;
int j = 0;
int iStrLen = 0;
int iTmp = 0;
static int iNum = 0;
int iFlag = 0;
int iCount = 0;
int iDataBegin = 0;
int iDataEnd = 0;
int iFlagadd = 0;
char strNum[MAX_STR_LEN] = "";
char strNumTmp[MAX_STR_LEN] = "";
char strNumTmpt[MAX_STR_LEN] = "";
if ( NULL == pStr || 0 >= strlen(pStr) )
{
printf("pStr = 0\n");
return 0;
}
printf("strlen(pStr) = %d\n", strlen(pStr));
iStrLen = strlen(pStr);
printf("pStr) = %s\n", (pStr));
strncpy(strNum, pStr, iStrLen);
printf("strNum) = %s\n", (strNum));
for (i =0; i < iStrLen; i++)
{
printf("strNum[%d] = %d\n", i , strNum[i]);
if (strNum[i] == 32 && 0 == iCount)
{
printf("strNum[%d] == %d iCount = %d\n", i, 32, iCount);
continue;
}
else if (strNum[i] == 32 && 0 != iCount)
{
break;
}
printf("xxxx\n");
if ( ('-' == strNum[i] || '+' == strNum[i]) )
{
printf("'-' == strNum[i] || '+' == strNum[i]\n");
printf("iCount = %d\n", iCount);
if ( 0 == iCount)
{
iDataBegin = i;
iCount++;
printf("iDataBegin = %d\n", iDataBegin);
}
iFlagadd++;
if ( 1 < iFlagadd )
{
return 0;
}
continue;
}
if ( strNum[i] < '0' || strNum[i] > '9')
{
printf("iDataEnd = %d\n", iDataEnd);
break;
}
printf("iCount = %d\n", iCount);
if ( 0 == iCount)
{
iDataBegin = i;
printf("iDataBegin = %d\n", iDataBegin);
}
iCount++;
iDataEnd = iDataBegin + iCount;
printf("iCount = %d\n", iCount);
}
printf("iDataBegin = %d\n", iDataBegin);
printf("iDataEnd = %d\n", iDataEnd);
if ( iDataBegin == iDataEnd )
{
return 0;
}
printf("strNum = %s\n", (strNum));
memset(strNumTmp, 0, MAX_STR_LEN);
memcpy(strNumTmp, strNum+iDataBegin, iDataEnd - iDataBegin);
printf("strNumTmp 33= %s\n", (strNumTmp));
iStrLen = strlen(strNumTmp);
printf("iStrLen = %d\n", iStrLen);
if ( 0 >= iStrLen)
{
return 0;
}
if ( strNumTmp[0] == '-' )
{
iFlag = 1;
iStrLen--;
strcpy(strNumTmpt, strNumTmp+1);
printf("strNumTmp = %s\n", strNumTmpt);
}else if ('+' == strNumTmp[0])
{
iStrLen--;
strcpy(strNumTmpt, strNumTmp+1);
}
else
{
strncpy(strNumTmpt, strNumTmp, iStrLen);
}
if ( 0 >= iStrLen)
{
return 0;
}
printf("strNumTmpt >0 iStrLen = %d\n", iStrLen);
for (j =iStrLen-1, i = 0; j >= 0; j--, i++)
{
if ( j == iStrLen-1 )
{
printf("strNum[%d]: %d, '0' = %d\n", iStrLen-1, strNumTmpt[j], '0');
iNum = strNumTmpt[j] - '0';
printf("iNum = %d\n", iNum);
continue;
}
printf("strNumTmpt[%d] = %d '0' = %d\n",j, strNumTmpt[j], '0');
iTmp = strNumTmpt[j] - '0';
printf("iTmp = %d\n", iTmp);
printf("i = %d\n", i);
iNum += iTmp * pow(10, i);
printf("iNum = %d\n", iNum);
}
if ( iFlag )
{
iNum = -iNum;
printf("iNum = %d\n", iNum);
}
return iNum;
}
int main()
{
int i = 0;
int iN = 0;
char *str[30]={"1", "+1", "-1", "123", "-123", "010", "+00131204",\
"-01324000", "2147483647", "-2147483647", "2147483648", "-2147483648",\
"-2147483649", "abc", "-abc", "1a", "23a8f","-3924x8fc"," 321", \
" -321", "123 456", "123 ", " - 321", " +4488", " + 413", \
"++c", "++1", "--2", " -2"};
iN = strtoint("");
printf("iN = %d\n", iN);
iN = strtoint("1");
printf("iN = %d\n", iN);
iN = strtoint("-1");
printf("iN = %d\n", iN);
iN = strtoint("123");
printf("iN = %d\n", iN);
iN = strtoint("-123");
printf("iN = %d\n", iN);
iN = strtoint("010");
printf("iN = %d\n", iN);
iN = strtoint("+00131204");
printf("iN = %d\n", iN);
iN = strtoint("-12345");
printf("iN = %d\n", iN);
iN = strtoint("-01324000");
printf("iN = %d\n", iN);
iN = strtoint("2147483647");
printf("iN = %d\n", iN);
iN = strtoint("-2147483648");
printf("iN = %d\n", iN);
iN = strtoint("2147483648");
printf("iN = %d\n", iN);
iN = strtoint("-2147483649");
printf("iN = %d\n", iN);
iN = strtoint("abc");
printf("iN = %d\n", iN);
iN = strtoint("-abc");
printf("iN = %d\n", iN);
iN = strtoint("1a");
printf("iN = %d\n", iN);
iN = strtoint("23a8f");
printf("iN = %d\n", iN);
iN = strtoint("-3924x8fc");
printf("iN = %d\n", iN);
iN = strtoint(" 321");
printf("iN = %d\n", iN);
iN = strtoint("123 456");
printf("iN = %d\n", iN);
iN = strtoint("123 ");
printf("iN = %d\n", iN);
iN = strtoint("- 321");
printf("iN = %d\n", iN);
iN = strtoint(" +4488");
printf("iN = %d\n", iN);
iN = strtoint(" + 413");
printf("iN = %d\n", iN);
iN = strtoint("++c");
printf("iN = %d\n", iN);
iN = strtoint("++1");
printf("iN = %d\n", iN);
iN = strtoint("--2");
printf("iN = %d\n", iN);
iN = strtoint("-2");
printf("iN = %d\n", iN);
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_STR_LEN 32
#define MAX_INT_VALUE 0xEFFFFFFF
#define LESS_ZERO 1
#define BIG_ZERO 2
int strtoint(char *pStr)
{
int i = 0;
int j = 0;
int iStrLen = 0;
int iTmp = 0;
static int iNum = 0;
int iFlag = 0;
int iCount = 0;
int iDataBegin = 0;
int iDataEnd = 0;
int iFlagadd = 0;
char strNum[MAX_STR_LEN] = "";
char strNumTmp[MAX_STR_LEN] = "";
char strNumTmpt[MAX_STR_LEN] = "";
if ( NULL == pStr || 0 >= strlen(pStr) )
{
printf("pStr = 0\n");
return 0;
}
printf("strlen(pStr) = %d\n", strlen(pStr));
iStrLen = strlen(pStr);
printf("pStr) = %s\n", (pStr));
strncpy(strNum, pStr, iStrLen);
printf("strNum) = %s\n", (strNum));
for (i =0; i < iStrLen; i++)
{
printf("strNum[%d] = %d\n", i , strNum[i]);
if (strNum[i] == 32 && 0 == iCount)
{
printf("strNum[%d] == %d iCount = %d\n", i, 32, iCount);
continue;
}
else if (strNum[i] == 32 && 0 != iCount)
{
break;
}
printf("xxxx\n");
if ( ('-' == strNum[i] || '+' == strNum[i]) )
{
printf("'-' == strNum[i] || '+' == strNum[i]\n");
printf("iCount = %d\n", iCount);
if ( 0 == iCount)
{
iDataBegin = i;
iCount++;
printf("iDataBegin = %d\n", iDataBegin);
}
iFlagadd++;
if ( 1 < iFlagadd )
{
return 0;
}
continue;
}
if ( strNum[i] < '0' || strNum[i] > '9')
{
printf("iDataEnd = %d\n", iDataEnd);
break;
}
printf("iCount = %d\n", iCount);
if ( 0 == iCount)
{
iDataBegin = i;
printf("iDataBegin = %d\n", iDataBegin);
}
iCount++;
iDataEnd = iDataBegin + iCount;
printf("iCount = %d\n", iCount);
}
printf("iDataBegin = %d\n", iDataBegin);
printf("iDataEnd = %d\n", iDataEnd);
if ( iDataBegin == iDataEnd )
{
return 0;
}
printf("strNum = %s\n", (strNum));
memset(strNumTmp, 0, MAX_STR_LEN);
memcpy(strNumTmp, strNum+iDataBegin, iDataEnd - iDataBegin);
printf("strNumTmp 33= %s\n", (strNumTmp));
iStrLen = strlen(strNumTmp);
printf("iStrLen = %d\n", iStrLen);
if ( 0 >= iStrLen)
{
return 0;
}
if ( strNumTmp[0] == '-' )
{
iFlag = 1;
iStrLen--;
strcpy(strNumTmpt, strNumTmp+1);
printf("strNumTmp = %s\n", strNumTmpt);
}else if ('+' == strNumTmp[0])
{
iStrLen--;
strcpy(strNumTmpt, strNumTmp+1);
}
else
{
strncpy(strNumTmpt, strNumTmp, iStrLen);
}
if ( 0 >= iStrLen)
{
return 0;
}
printf("strNumTmpt >0 iStrLen = %d\n", iStrLen);
for (j =iStrLen-1, i = 0; j >= 0; j--, i++)
{
if ( j == iStrLen-1 )
{
printf("strNum[%d]: %d, '0' = %d\n", iStrLen-1, strNumTmpt[j], '0');
iNum = strNumTmpt[j] - '0';
printf("iNum = %d\n", iNum);
continue;
}
printf("strNumTmpt[%d] = %d '0' = %d\n",j, strNumTmpt[j], '0');
iTmp = strNumTmpt[j] - '0';
printf("iTmp = %d\n", iTmp);
printf("i = %d\n", i);
iNum += iTmp * pow(10, i);
printf("iNum = %d\n", iNum);
}
if ( iFlag )
{
iNum = -iNum;
printf("iNum = %d\n", iNum);
}
return iNum;
}
int main()
{
int i = 0;
int iN = 0;
char *str[30]={"1", "+1", "-1", "123", "-123", "010", "+00131204",\
"-01324000", "2147483647", "-2147483647", "2147483648", "-2147483648",\
"-2147483649", "abc", "-abc", "1a", "23a8f","-3924x8fc"," 321", \
" -321", "123 456", "123 ", " - 321", " +4488", " + 413", \
"++c", "++1", "--2", " -2"};
iN = strtoint("");
printf("iN = %d\n", iN);
iN = strtoint("1");
printf("iN = %d\n", iN);
iN = strtoint("-1");
printf("iN = %d\n", iN);
iN = strtoint("123");
printf("iN = %d\n", iN);
iN = strtoint("-123");
printf("iN = %d\n", iN);
iN = strtoint("010");
printf("iN = %d\n", iN);
iN = strtoint("+00131204");
printf("iN = %d\n", iN);
iN = strtoint("-12345");
printf("iN = %d\n", iN);
iN = strtoint("-01324000");
printf("iN = %d\n", iN);
iN = strtoint("2147483647");
printf("iN = %d\n", iN);
iN = strtoint("-2147483648");
printf("iN = %d\n", iN);
iN = strtoint("2147483648");
printf("iN = %d\n", iN);
iN = strtoint("-2147483649");
printf("iN = %d\n", iN);
iN = strtoint("abc");
printf("iN = %d\n", iN);
iN = strtoint("-abc");
printf("iN = %d\n", iN);
iN = strtoint("1a");
printf("iN = %d\n", iN);
iN = strtoint("23a8f");
printf("iN = %d\n", iN);
iN = strtoint("-3924x8fc");
printf("iN = %d\n", iN);
iN = strtoint(" 321");
printf("iN = %d\n", iN);
iN = strtoint("123 456");
printf("iN = %d\n", iN);
iN = strtoint("123 ");
printf("iN = %d\n", iN);
iN = strtoint("- 321");
printf("iN = %d\n", iN);
iN = strtoint(" +4488");
printf("iN = %d\n", iN);
iN = strtoint(" + 413");
printf("iN = %d\n", iN);
iN = strtoint("++c");
printf("iN = %d\n", iN);
iN = strtoint("++1");
printf("iN = %d\n", iN);
iN = strtoint("--2");
printf("iN = %d\n", iN);
iN = strtoint("-2");
printf("iN = %d\n", iN);
return 0;
}