我有来自UART的ASCII字符串,看起来像" 43.533a,5532"而且我想提取这两个数字。我的想法是使用strtok和逗号作为分隔符分隔它们,然后从第一个字符串中删除最后一个字符,然后使用atoi()转换数字,或者使用sscanf()有更简单的方法吗?字符串操作不是我经常使用的。 另一个问题是,如果字符串看起来不同,我怎么能事先捕获它?
答案 0 :(得分:2)
是的,您可以使用import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([[1, 3.00]], columns=['At_Bat', 'Stand'])
plt.ion()
x = np.arange(0, 999, 0.1)
y1 = -5
y2 = .75
y3 = 2.25
y4 = 5
plt.fill_between(x, y1, y2, color='lawngreen', alpha='.6')
plt.fill_between(x, y2, y3, color='yellow', alpha='.6')
plt.fill_between(x, y3, y4, color='red', alpha='.6')
plt.scatter(df.At_Bat, df.Stand)
plt.plot(df.At_Bat, df.Stand)
plt.axhline(y=0, color='black')
plt.xticks(np.arange(0, df.Stand.max() + 1))
plt.ylim([-4, 4])
plt.xlim([0, df.Stand.max() + 1])
df2 = pd.DataFrame([[2, 2.50]])
df = np.append(df, df2, axis = 0)
轻松完成此操作。
以下是一个例子。见working here:
sscanf()
<强>输出强>:
#include <stdio.h>
int main(void) {
float a;
int b;
char *sNum = "43.533a,5532";
sscanf(sNum, "%fa,%d", &a, &b);
printf("a= %f || b= %d", a,b);
return 0;
}
注意:由于默认情况下float的精确度为a= 43.533001 || b= 5532
小数位,因此您可能需要考虑并在必要时进行更正。