字符转换为数字,以|分割

来源:互联网 发布:网络里沙发是什么意思 编辑:程序博客网 时间:2024/05/21 21:38
#include <stdio.h>#include <stdlib.h>#define INT_MAX ((1<<31)-1)#define INT_MIN (1<<31)#define isRight(x) (x==' ' || x=='+' || x=='-' || (x>='0'&&x<='9'))int getNum(char* s, int begin, int end){    int flag = 1;    int num = 0;        while (begin<=end && s[begin] == ' ')        begin++;    if (s[begin] == '-')    {        flag = -1;        begin++;    }        if (s[begin] == '+')        begin++;            while (begin<=end)    {        if (s[begin]<'0' || s[end]>'9')        {            return 0;        }        if (num>INT_MAX/10 || (INT_MAX==INT_MAX/10 && (s[begin]-'0')>INT_MAX%10))            return (flag==-1) ? INT_MIN : INT_MAX;        num = num*10+s[begin]-'0';        begin++;    }    return num*flag;}/*以|分隔符的数值转换 一面*/void strToNum(char* s){    int a[20];    int i = 0;    int begin;    int end;    int count = 0;        if (s == NULL)        return;            while (s[i]!='\0' && s[i]=='|')        i++;            while (s[i] != '\0')    {        begin = i;        while (s[i]!='\0' && s[i]!='|' && isRight(s[i]))        {            i++;        }        if (s[i]=='\0' || s[i]=='|')        {            end = i-1;            a[count++] = getNum(s, begin, end);            printf("a[%d] %d\n", count-1, a[count-1]);        }        else        {            while (s[i]!='\0' && s[i]!='|')            {                i++;            }            if (s[i] == '\0')                return;        }        i++;    }}int main(){    char s[] = "111111|-123213|dsafd| adf | -123123213213123|adaew|12334243243243";    strToNum(s);    //printf("max int  %d, min int %d\n", INT_MAX, INT_MIN);    return 0;}


 

0 0