如何将字符串(存储在fgets()
函数中)标记为各种所需的大小?这些值之间没有任何分隔符(\n,,,:,:,
等)。字符串是
“ABCD 1234 EFG56H1.223.445.66 J”
我希望生成的令牌应该看起来像
“ABCD”“1234”“”/将空格读作字符/“EF”“56”“H”“1.22”/ (.)点也是一个字符/“3.44”“5.66”
如何用strtok
功能做到这一点?
这个问题实际上是用于使用 C 从 PDB 文件中提取 ATOM 记录。
如何将字符串(存储在fgets()
函数中)标记为各种所需的大小?这些值之间没有任何分隔符(\n,,,:,:,
等)。字符串是
“ABCD 1234 EFG56H1.223.445.66 J”
我希望生成的令牌应该看起来像
“ABCD”“1234”“”/将空格读作字符/“EF”“56”“H”“1.22”/ (.)点也是一个字符/“3.44”“5.66”
如何用strtok
功能做到这一点?
这个问题实际上是用于使用 C 从 PDB 文件中提取 ATOM 记录。
我不认为你可以使用中风。您需要编写自己的子字符串函数,但这样的事情会起作用:
int position = 0;
int i = 0;
for (int i = 0; i < lengthOfColumnWidths; i++) {
if (columnWidths[i] <= 0) {
# Error, column width must be greater than 0.
}
char* columnVal = substring(lineOfText, position, position + columnWidths[i]);
# store columnVal in some final array, e.g. finalArray[i] = columnVal
position = position + columnWidths[i];
}
columnWidths 是一个整数数组,其中第 i 个值是第 i 列的宽度。所以对你来说是:
[4, 5, 1, 2, 2, 1, 4, etc...]
你可以简单地使用 sscanf
char a[100],b[100],c[100],d[100],e[100],f[100],g[100],h[100];
sscanf("ABCD 1234 EFG56H1.223.445.66 J","%s%s%2s%*1s%2s%1s%4s%4s%4s",a,b,c,d,e,f,g,h);