回覆列表
  • 1 # 錢布斯

    /*

    下面的程式碼計算一段ASCII文字的寬度。

    每個字元可以設定不同的長度。

    */

    #include

    #include

    #include

    #include

    #define TAB_WIDTH 8 //假設製表符的寬度為8

    #define ENTER_WIDTH 0 //假設回車符的寬度為0

    #define ALARM_WIDTH 0 //假設警示符的寬度為0

    int cl[256];

    size_t digMaxWidth(char const * str)

    {

    char * b;

    char * e;

    size_t ml;

    size_t l;

    if(str==NULL)

    return 0;

    l=strlen(str);

    b=(char *)malloc(l+1);

    memcpy(b,str,l+1);

    e=b;

    str=b;

    for (;*e;e++)

    {

    if(*e=="\b")

    {

    if(b>str)

    b--;

    }

    else

    {

    *b=*e;

    b++;

    }

    }

    *b=0;

    for(b=str,ml=0,l=0;*b;b++)

    {

    if(*b=="\n")

    {

    ml=ml>l?ml:l;

    l=0;

    }

    else

    l+=cl[*(unsigned char const *)b];

    }

    free(str);

    ml=ml>l?ml:l;

    return ml;

    }

    int main()

    {

    int c;

    for(c=1;c<256;c++) /*預設每隔字元寬度為1*/

    cl[c]=1;

    cl[0]=0;

    cl["\t"]=TAB_WIDTH; /*製表符寬度*/

    cl["\r"]=ENTER_WIDTH; /*回車符寬度*/

    cl["\a"]=ALARM_WIDTH; /*警示符寬度*/

    /*...*/

    printf("%d\n",digMaxWidth("123\n4567\n12\nABCDEF"));

    printf("%d\n",digMaxWidth("123\b\b\b\b\b\b\n4560007\n12\n\bABCDEF"));

    return 0;

    }

  • 中秋節和大豐收的關聯?
  • 疾病的傳變概括為哪三個方面?