好的,我的输入文件如下所示:
Adam Zeller 45231 78 86 91 64 90 76
Barbara Young 274253 88 77 91 66 82 93
Carl Wilson 11223 87 77 76 78 77 82
我想使用strtok()函数将名字和姓氏保存到一个数组中并将数字输入到我猜是一个int数组中,但我无法弄清楚如何忽略名字和姓氏时的名字我正在使用strtok()
有人可以帮我解决这个问题吗?
我也不能使用字符串库,但我可以使用cstring库
答案 0 :(得分:0)
您的输入格式似乎已固定为<first name>
和<last name>
,后跟七个数字。如果是这种情况,您可以从文件流中读取数据,而不是使用C风格的输入和strtok
:
int n0, n1, n2, n3, n4, n5, n6;
string firstName, lastName;
...
// Now you can read the whole line with a single line of code:
myFileStream >> firstName >> lastName >> n0 >> n1 >> n2 >> n3 >> n4 >> n5 >> n6;
如果int
和<first name>
后跟<last name>
的数量未修复,您可以从文件中读取的每一行构建stringstream
,并使用一个嵌套循环来解析所有int
个数字。
我无法使用
<string>
库
如果不允许string
,您仍然可以将>>
与char
数组一起使用。但是,它不会那么安全。您也可以使用fscanf
,如下所示:
int n0, n1, n2, n3, n4, n5, n6;
char firstName[256], lastName[256];
...
fscanf(fd, "%255s%255s%d%d%d%d%d%d%d", firstName, lastName, &n0, &n1, &n2, &n3, &n4, &n5, &n6);
请注意%s
的尺寸限制。你需要它们以避免缓冲区溢出。
答案 1 :(得分:0)
在您的示例中,第一个名称由空格分隔,因此请首先查找:
static const char example_text[] = "Adam Zeller 45231 78 86 91 64 90 76";
char * p_text = &example_text[0];
char * p_first_name = p_text;
char * p_surname = NULL;
可以使用strchr函数在名字后面找到空格的位置:
unsigned int length_first_name = 0U;
p_surname = strchr(example_text, ' ');
if (p_surname != NULL)
{
length_first_name = p_surname = p_first_name;
p_surname++;
}
由于strchr
修改字符串,我更喜欢strtok
函数优于strtok
。
编辑1:子串。
函数strstr可用于获取或提取或复制子字符串。
请注意,您的目的地需要为子字符串加上空间以及终止字符的空间。
使用您的教科书或参考手册,学习C风格的字符串函数。任何好的参考书都会将这些组合在一起。