将一个字符串解析为多个字符串

Parsing a string into multiple strings

本文关键字:字符串 一个      更新时间:2023-10-16

我必须将一个字符串拆分为多个字符串。事实上,我需要的是解析来自以下格式(i9,i9,i2)的文件的一些输入。

i9表示十进制数,如下所示:(5空格)4567

所以我需要正确地检索这些数字。宽度总是固定的,所以每个数字都必须遵守这一点。这种格式的一个正确例子是

(5个空格)4567(6个空格)453(1个空格)2或(5个空格)4567(6个空格)45322(在这种情况下,22是i2的自变量)

数字前面的空格让我头疼,所以我想我可以把每个参数拆分成一个字符数组,然后把它转换成整数,因为%d说明符忽略了所有空格,我不知道如何使用宽度和忽略空格。。(如果可以做到这一点,我的意思是,将所有解析为整数,请这样说!!)

如果不是。。好吧,我需要帮助将每个字符串解析为子字符串,到目前为止我已经完成了这项工作,但它不起作用:

while (fgets(buffer, 600, f)) {
    sscanf(buffer, "%9[^n]s %9[^n]s %2[^n]s", arg1, arg2, arg3);
    ....
}

请帮忙,我们将不胜感激!!!

答案是C。这就是我使用变量名new的原因。

使用strncpy()并正确终止结果

char part1[10], part2[10], part3[3];
const char *new = "     4567      45322n"; /* the line read */
strncpy(part1, new, 9);    part1[9] = 0;
strncpy(part2, new+9, 9);  part2[9] = 0;
strncpy(part3, new+18, 2); part3[2] = 0;

我建议您不要尝试编写多语言源文件。

在C++中,使用substr(),以及常见的字符串到整数的转换:

#include <string>
std::string s = "     1234      78922";
std::string s1 = s.substr(0, 9);
std::string s2 = s.substr(9, 9);
std::string s3 = s.substr(18);   // or substr(18, 2)
int n1 = std::stoi(s1), n2 = std::stoi(s2), n3 = std::stoi(s3);

在适当的地方应用通常的长度检查,以验证输入的格式是否正确。

相关文章: