некоторые части текста, извлеченные из txt-файла с помощью fgets, потерялись в c

Меня удивляет, что это еще не упоминалось, поэтому для полноты ...

Вы можете выполнить распаковку списка с помощью оператора «splat»: *, который также будет скопируйте элементы вашего списка.

old_list = [1, 2, 3]

new_list = [*old_list]

new_list.append(4)
old_list == [1, 2, 3]
new_list == [1, 2, 3, 4]

Очевидным недостатком этого метода является то, что он доступен только в Python 3.5 +.

Сроки, однако, это работает лучше, чем другие распространенные методы.

x = [random.random() for _ in range(1000)]

%timeit a = list(x)
%timeit a = x.copy()
%timeit a = x[:]

%timeit a = [*x]

#: 2.47 µs ± 38.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#: 2.47 µs ± 54.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#: 2.39 µs ± 58.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

#: 2.22 µs ± 43.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
0
задан John Bollinger 24 March 2019 в 03:07
поделиться

2 ответа

Функция fgets имеет следующее описание:

char *
 fgets(char * restrict str, int size, FILE * restrict stream);

Так зачем делать буфер массивом указателей? char buffer[MAX_INT] это то, что нам нужно.
И следующее утверждение: if (fp = fopen("/Users/weiyang/code/txt", "r")) небезопасно, лучше добавить круглые скобки после присваивания.

0
ответ дан theArcticOcean 24 March 2019 в 03:07
поделиться

Хорошо, я нашел ответ.

Добавляя ниже после "ptr = strtok (NULL," ");" просто работал. Я также должен был что-то сделать с частью tagger, потому что она также написана на корейском языке.

ptr = strtok(NULL, " ");
			for (i = 0; i < strlen(ptr); i++) {
				printf("%c%c", ptr[i], ptr[i + 1]); //if it's korean, then print two bytes
				i++;
			}

0
ответ дан Dahn Hwang 24 March 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: