怎样判断CString str("****"),是不是16进制数啊?CString str("0x3f"),是CString str("ge55"),不是CString str("0x5g"),不是……

解决方案 »

  1.   

    以上都是字符串,不是16进制数
    CString str("\x03f")
    CString str("\x055")
    才是16进制数
      

  2.   

    字符串是从对话框中得到的,最大长度为4的CString。所以这个CString应该没有str("\x03f")类似的结构可以直接用吧!
      

  3.   

    哦,看错了。
    你的意思是分析字符串str是不是表示一个16进制数吧。
    那就是词法分析的范围了,可以根据状态转换图分析。
    扫描第一个字符,如果是‘0’,继续分析第二个字符,否则不是16进制数,退出分析。
    扫描第二个字符,如果是‘x’,继续分析第三个字符,否则不是16进制数,退出分析。
    扫描第三个字符,如果(char>=a&&char<=f)||(char>=A&&char<=F),继续分析第四个字符,否则不是16进制数,退出分析。
    扫描第四个字符,如果(char>=a&&char<=f)||(char>=A&&char<=F)||(char==' '),则此str是16进制数并退出分析,否则不是16进制数,退出分析。
      

  4.   

    以上所有‘(char>=a&&char<=f)||(char>=A&&char<=F)’
    应改为‘(char>=a&&char<=f)||(char>=A&&char<=F)||(char>=0&&char<=9)’