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

时间:2012-02-03 09:28:12

标签: c++ c string parsing

我必须将一个字符串分成几个字符串。实际上我需要的是从一个文件中解析一些输入,例如以下格式(i9,i9,i2)。

i9表示十进制数字: (5blankspaces)4567

所以我需要正确检索这些数字。宽度总是固定的,所以每个数字都必须服从。 该格式的正确实例是

(5spaces)4567(6spaces)453(1space)2 要么 (5spaces)4567(6spaces)45322(在这种情况下22是i2的参数)

数字之前的空格给我带来了麻烦,所以我想我可以将每个参数拆分成一个字符数组然后将其转换为整数,因为%d说明符忽略所有空格并且我不知道如何使用宽度以及忽略空格..(如果可以这样做,我的意思是,解析全部为整数请说出来!!)

如果没有..好吧,我需要帮助来解析每个字符串到子字符串,到目前为止我已经完成了这个但是它没有工作:

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

拜托,非常感谢任何帮助!!!

2 个答案:

答案 0 :(得分:3)

这个答案是C.这就是我使用变量名new

的原因

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

char part1[10], part2[10], part3[3];
const char *new = "     4567      45322\n"; /* 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;

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

答案 1 :(得分:2)

在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);

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

相关问题