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

C++ 将字符串解析为多个字符串,c++,c,string,parsing,C++,C,String,Parsing,我得把一根绳子分成几根。事实上,我需要的是解析一个文件中的一些输入,例如以下格式的文件(i9、i9、i2) i9表示十进制数,如下所示: (5个空格)4567 所以我需要正确地检索这些数字。宽度总是固定的,所以每个数字都必须遵守。 这种格式的正确实例是 (5个空格)4567(6个空格)453(1个空格)2 或 (5个空格)4567(6个空格)45322(其中22是本例中i2的参数) 数字前的空格让我头疼,所以我想我可以将每个参数拆分为一个字符数组,然后将其转换为整数,因为%d说明符忽略所有空格,

我得把一根绳子分成几根。事实上,我需要的是解析一个文件中的一些输入,例如以下格式的文件(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

使用并正确终止结果

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;
我建议您不要尝试编写多语言源文件。C++中的

< P>,使用<代码>子()>代码>,以及通常的字符串到整数转换:

#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);
#包括
std::string s=“1234 78922”;
std::strings1=s.substr(0,9);
std::string s2=s.substr(9,9);
std::string s3=s.substr(18);//或substr(18,2)
int n1=std::stoi(s1),n2=std::stoi(s2),n3=std::stoi(s3);

应用适当的长度检查,以验证输入是否正确格式。< /P> C或C++?选择你的命运!:)可能重复的可能重复的哈哈,

new
作为一个变量名是一个很好的方式绊倒所有微软受害者:-)谢谢大家的答案!!除以下情况外,一切正常:(2空间)137411365101(3空间)0.93实际格式是i7 i7 f7,但当它解析0.93时,它存储(空间)1(空间)0.93,这是正确的(宽度7),但在文件中不是这样的(如我上面所写的)。。那1个号码不应该在那里:S请帮忙!哈哈!!复制代码以显示我理解并修复了我的错误!它就像一个符咒,谢谢大家!:)