Я пытаюсь разделить следующую строку на три отдельные переменные, то есть a, b и c.:
" mov/1/1/1,0 STR{7}, r7"
каждый должен содержать другой сегмент строки, например:
a = "mov/1/1/1,0"
b = "STR{7}"
c = "r7"
Между каждой командой может быть пробел или табуляция; это то, что делает эту часть кода более сложной.
Я пытался использовать strtok
для манипуляций со строками, но это не сработало.
char command[50] = " mov/1/1/1,0 STR{7}, r7";
char a[10], b[10], c[10];
char * ptr = strtok(command, "\t");
strcpy(a, ptr);
ptr = strtok(NULL, "\t");
strcpy(b, ptr);
ptr = strtok(NULL, ", ");
strcpy(c, ptr);
но это делает вещи действительно беспорядочными, поскольку переменные a, b
и c
получают больше значений, чем должны, что приводит к сбою программы.
Ввод может варьироваться от:
" mov/1/1/1,0 STR{7}, r7"
"jsr /0,0 PRTSTR"
"mov/1/1/0,0 STRADD{5}, LASTCHAR {r3} "
в котором значения a, b и c изменяются на другую часть данной строки.
Мне сказали, что для таких манер безопаснее использовать sscanf, чем strtok, но я не уверен, почему и как это может мне помочь.
Буду более чем рад услышать ваше мнение!
mov/1/1/0,0
иLASTCHAR {r3}
Это будет длиннее девяти символов (a[10]
,c[10]
). - person BLUEPIXY   schedule 18.08.2013strtok
только с"\t"
в качестве разделителя. Возможно, вам просто нужны" \t"
(пробелы или табуляции, как вы говорите), хотя в качестве разделителя будет использоваться любая последовательность из одного или нескольких пробелов или табуляции. Если вы хотите, чтобы два пробела означали «пустое» поле, это не сработает. - person Chris Dodd   schedule 18.08.2013"jsr /0,0 PRTSTR"
бросает гаечный ключ в работу; у него во втором поле есть значащая запятая, тогда как в двух других строках примеров запятая во втором поле незначительна. Если вам нужно удалить конечные запятые, вы можете сделать это после разделения на основе пробелов. - person Jonathan Leffler   schedule 18.08.2013