gpt4 book ai didi

c - 在 C 中测试值 > 127 的 ascii 字符

转载 作者:行者123 更新时间:2023-11-30 17:34:15 24 4
gpt4 key购买 nike

我有一些这样的数据:
2秒²S 1/2 0
2p²P° 1/2 160015
3/2 163990
3秒²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
5秒²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”或“²”,那么我需要设置S=2

如果nist->term的第一个字符是“3”或“³”,那么我需要设置S=3

我用开关尝试过:

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)

它不起作用(事实上,它甚至无法编译)。我发现 char 的范围是 -127 到 127。而 '¹' 的值为 185d; '²' 的值为 178d; '³' 的值为 179d。

我尝试将字符串转换为 (unsigned int),编译器仍然提示 case 语句。

我尝试将数据结构中的字段更改为unsigned char。但后来我的程序无法编译,因为代码中使用 nist.term 的许多其他地方存在数据类型冲突。

尽管变量term的数据类型超出了它所保存的数据的范围,但它仍然正确地打印出来。

因此,寻找有关如何将该字符串中的第一个字符转换为整数的建议。

谢谢。

最佳答案

我这样解决了这个问题:

nist_t *prtnist_r(nist_t *nist,unsigned short int n_low,unsigned short int n_high, unsigned short int l_low, unsigned short int l_high, unsigned short int degeneracy)
{
unsigned short int a=0; /* used as index counter */
unsigned short int spin_multiplicity=0; /* spin_multiplitiy=2S+1 */

while((NULL!=nist[a].config) && (NULL!=nist[a].term))
{
if((nist[a].term[0]==-62 && nist[a].term[1]==-71) || nist[a].term[0]==49)
spin_multiplicity=1;
if((nist[a].term[0]==-62 && nist[a].term[1]==-78) || nist[a].term[0]==50)
spin_multiplicity=2;
if((nist[a].term[0]==-62 && nist[a].term[1]==-77) || nist[a].term[0]==51)
spin_multiplicity=3;
if(nist[a].term[0]==52)
spin_multiplicity=4;
if(nist[a].term[0]==53)
spin_multiplicity=5;

if(nist[a].config[0]!='-')
{
if(nist[a].n>=n_low && nist[a].n<=n_high && nist[a].l>=l_low && nist[a].l<=l_high)
{
if(degeneracy==0 || degeneracy==spin_multiplicity)
{
(void)fprintf(stderr,"%s\t%d\t%d\t%s\t%14.8e\n",nist[a].config,nist[a].n,nist[a].l,nist[a].term,nist[a].level);
}
}
}
else
(void)fprintf(stderr,"%s\t%s\t%s\t%s\t%14.8e\n","Limit","--","--","--",nist[a].level);
++a;
}
return nist;
}

关于c - 在 C 中测试值 > 127 的 ascii 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com