将字符串拆分为不同的部分,没有空格和分隔符
split string into different parts without spaces and dividers
我有一个字符串 2020122812.txt,我希望能够从中提取四位数年份、两位数月份、两位数日期和两位数小时的数字。
下面是我尝试执行此操作的代码片段,其中 2020122812.txt 将作为第一个参数输入:
int main(int argc, char *argv[])
{
char txtfName[500];
int bYYYY;
int bMM;
int bDD;
int bHH;
sprintf(txtName,"%s",argv[1]);
sscanf(txtName,"%.4d%.2d%0.2d%0.2d.txt",YYYY,MM,DD,HH);
printf("YYYY=%d\n",YYYY);
printf("MM=%d\n",MM);
printf("DD=%d\n",DD);
printf("HH=%d\n",HH);
}
不幸的是,我得到的 YYYY、MM、DD、HH 为零,而不是预期的结果:
2020 for YYYY
12 for MM
28 for DD
12 for HH.
如何调整此代码以获得我想要的结果?
与 printf()
不同,scanf()
中的转换说明符没有指定精度的选项。读取的最大长度应指定为不带 .
.
固定码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int YYYY;
int MM;
int DD;
int HH;
if (argc < 2) return 1;
if (sscanf(argv[1],"%4d%2d%2d%2d.txt",&YYYY,&MM,&DD,&HH) != 4) return 1;
printf("YYYY=%d\n",YYYY);
printf("MM=%d\n",MM);
printf("DD=%d\n",DD);
printf("HH=%d\n",HH);
}
此代码中还修复了这些错误:
- 未包括必需的 header。
- 未检查参数的数量。
- 未检查
sscanf()
的结果。
- 使用了未声明的标识符。
&
在 sscanf()
的参数中缺失。
- 复制输入只是为了产生缓冲区溢出的风险。
我有一个字符串 2020122812.txt,我希望能够从中提取四位数年份、两位数月份、两位数日期和两位数小时的数字。
下面是我尝试执行此操作的代码片段,其中 2020122812.txt 将作为第一个参数输入:
int main(int argc, char *argv[])
{
char txtfName[500];
int bYYYY;
int bMM;
int bDD;
int bHH;
sprintf(txtName,"%s",argv[1]);
sscanf(txtName,"%.4d%.2d%0.2d%0.2d.txt",YYYY,MM,DD,HH);
printf("YYYY=%d\n",YYYY);
printf("MM=%d\n",MM);
printf("DD=%d\n",DD);
printf("HH=%d\n",HH);
}
不幸的是,我得到的 YYYY、MM、DD、HH 为零,而不是预期的结果:
2020 for YYYY
12 for MM
28 for DD
12 for HH.
如何调整此代码以获得我想要的结果?
与 printf()
不同,scanf()
中的转换说明符没有指定精度的选项。读取的最大长度应指定为不带 .
.
固定码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int YYYY;
int MM;
int DD;
int HH;
if (argc < 2) return 1;
if (sscanf(argv[1],"%4d%2d%2d%2d.txt",&YYYY,&MM,&DD,&HH) != 4) return 1;
printf("YYYY=%d\n",YYYY);
printf("MM=%d\n",MM);
printf("DD=%d\n",DD);
printf("HH=%d\n",HH);
}
此代码中还修复了这些错误:
- 未包括必需的 header。
- 未检查参数的数量。
- 未检查
sscanf()
的结果。 - 使用了未声明的标识符。
&
在sscanf()
的参数中缺失。- 复制输入只是为了产生缓冲区溢出的风险。