Разделение строк ввода через запятую - PullRequest
0 голосов
/ 01 марта 2012

Я читаю содержимое файла в 2D массив.Файл имеет тип:

FirstName,Surname
FirstName,Surname

и т. Д.Это домашнее задание, и мы можем предположить, что у каждого есть имя и фамилия.

Как бы я разделил строку, используя запятую, чтобы в двумерном массиве это выглядело так:1006 *

char name[100][2];

с

       Column1     Column2
Row 0  FirstName   Surname
Row 1  FirstName   Surname

Я действительно борюсь с этим и не могу найти никакой помощи, которую могу понять.

1 Ответ

5 голосов
/ 01 марта 2012

Вы можете использовать strtok для токенизации вашей строки на основе разделителя, а затем strcpy указатель на токен, возвращенный в ваш массив name.

Кроме того, вы можете использовать strchr, чтобы найти местоположение запятой, а затем использовать memcpy, чтобы скопировать части строки до и после этой точки в ваш массив name. Этот способ также сохранит вашу исходную строку и не искажает ее, как strtok. Это также будет более поточно-ориентированным, чем использование strtok.

Примечание: поточно-ориентированной альтернативой strtok является strtok_r, однако она объявлена ​​как часть стандарта POSIX. Если эта функция недоступна для вас, возможно, аналогичная функция определена для вашей среды.

РЕДАКТИРОВАТЬ: Другой способ заключается в использовании sscanf, однако вы не сможете использовать спецификатор формата %s для первой строки, вместо этого вам придется использовать спецификатор с набор символов, которые не совпадают (','). Поскольку это домашнее задание (и очень простое), я позволю вам разобраться.

EDIT2: Кроме того, ваш массив должен быть char name[2][100] для массива из двух строк, каждая размером 100 char s. В противном случае, у вас будет массив из 100 строк, каждая размером 2 char с.

...