我有一些这样的数据:
2s ²S 1/2 0
2p ²P° 1/2 160015
3/2 163990
3s ²S 1/2 1682700
3p ²P° 1/2 1726520
3/2 1727830
3d ²D 3/2 1743500
5/2 1743890
4s ²S 1/2 2252600
4p ²P° 3/2 2270150
1/2 2270150
4d ²D 3/2 2277380
5/2 2277700
4f ²F° 5/2 2278060
7/2 2278140
5s ²S 1/2 2511600
5p ²P° 3/2 2520900
1/2 2520900
...
我将此数据读入此类型定义的变量中:
typedef enum
{
s=0,
p=1,
d=2,
f=3,
g=4,
h=5,
i=6,
k=7,
l=8,
m=9,
n=10,
o=11,
q=12,
r=13,
t=14,
u=15,
v=16,
w=17,
x=18,
y=19,
z=20
} aqn; /* azimuthal quantum number */
typedef struct
{
char *config;
char *term;
int n; /* principle quantum number */
aqn l; /* azimuthal quantum number */
float j;
double level; /* energy level, in cm^-1 */
} nist_t; /* NIST data type */
变量声明为nist_t *nist;
如您所见,数据的第二列将存储在nist->term
.
假设我有以下声明: unsigned short int S
我需要从中获取一些信息nist->term
。具体来说,如果第一个字符是“1”或“¹”,那么我需要设置S=1
.
如果第一个字符nist->term
是 '2' 或 '²',那么我需要 set S=2
。
如果第一个字符nist->term
是 '3' 或 '³',那么我需要设置S=3
.
我试过了switch
:
switch(nist[ix].term[0])
{
case '1': S=1;
break;
case '¹': S=1;
break;
case '2': S=2;
break;
case '²': S=2;
break;
... (and so on)
它不起作用(事实上,它甚至不会编译)。我发现 a 的范围char
是 -127 到 127。而 '¹' 的值是 185d;'²' 的值为 178d;'³' 的值为 179d。
我尝试将字符串转换为(unsigned int)
,编译器仍然抱怨这些case
语句。
我尝试将数据结构中的字段更改为unsigned char
. 但是后来我的程序没有编译,因为在使用的代码中的许多其他地方存在数据类型冲突nist.term
。
尽管变量的数据类型term
超出了它所保存的数据的范围,但它仍然可以正确打印出来。
因此,寻找有关如何将该字符串中的第一个字符转换为整数的建议。
谢谢。