我想将此char数组中的每个元素保存到一个单独的数组中

时间:2014-01-30 18:02:21

标签: c++ arrays char

好的,我的输入文件如下所示:

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库

2 个答案:

答案 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风格的字符串函数。任何好的参考书都会将这些组合在一起。