2015-10-22 2 views
0

У меня есть задание на завтра, и я только что начал его.Калькулятор PNR в программировании на языке C с использованием связанных списков

Меня попросили сделать калькулятор PNR, используя связанные списки.

Идея заключается в том, что я должен написать строку ввода, например (25 35 +), и отобразить результат с помощью связанных списков.

структура, используемая в

typedef struct { 
int data; 
struct cell *next;}cell; 

и

typedef struct { 
int positif; 
struct cell *datas; 
int ref;} num ; 

в приведенном выше примере, когда я пишу 25 35 +, я должен запасти 25 в виде числа и толкать его в стек , и делать то же самое с 35, и когда оператор считывается, я делаю операцию, вызывающую 2 попса.

проблема в том, что я не знаю, как отделить числа от строки при чтении пробела.

это мой главный

char strIn[250]; 
num *lenumero = initialisation(); 
printf(">");      
scanf("%s", &strIn);    

int i=0; 
while(strIn[i] != '\0') 
{ 
    /*Here I want to write the code that reads the string untill it finds a space , 

затем нажать номер перед пробелом в стеке!

} 

Например Strin [0] = 2 Strin [1] = 5 Strin [2] = (пробел) Так что поставит 2 в сотовом> данные, 5 в сотовом> next- >, а затем я помещаю всю ячейку в ячейку, используемую в структурном номере, и нажимаю номер структуры в стек.

Спасибо

+1

Обратная связь по-польски? – erip

+0

@erip, это замечательная шутка, чтобы называть обратную польский нотацию PRN! – SergeyA

ответ

0

Как уже упоминалось в ответе Сергея, вы можете использовать strtok со свободным пробелом как разделитель.

pointer = strtok(strIn, " "); 
while(pointer != NULL) { 
    printf("%s\n", pointer); // this is where you put your logic to push the number to the stack. 
    pointer = strtok(NULL, " "); 
} 

Если вы хотите проверить, если это оператор (т.е. любой из «+ -/*»), вы можете использовать strchr

const char *operators = "+-/*"; 
... 
char *c = pointer; 
if(strchr(operators, *c)) { 
    printf("%c is in \"%s\"\n", *c, operators); // replace this with your logic to read from the stack and calculate the numbers with the given operator. 
}else { 
    while(*c) { 
    printf("%c\n", *c); // this will print all the digits of the numbers 
    c++; 
    } 
} 
... 

Проблема с кодом прямо сейчас, что вы используя scanf("%s", strIn);, который будет читать только первую строку до пробела. Вместо этого вы должны использовать fgets.

fgets(strIn, 25, stdin); 

Это live demo.

+0

Хорошо, я понял, теперь есть возможность вывести 25 из вывода, как толкать его в стек? например push (указатель [0], стек). – Zok

+0

@Zok yes Вы можете использовать функцию 'atoi' для преобразования строки в целое число и использовать' push (atoi (pointer), stack) '. Это предполагает, что push принимает целое число как параметр. – Linus

1

я буду считать, что это назначение C, а не C++.

Для обозначения лака вы не нуждаетесь в парафитах. Вероятно, самым простым способом было бы использовать strtok(), чтобы сломать входную строку в токены, разделенные пробелами, и просто проверить, соответствует ли токен «+» - «/» или «*». Если это не так, прочитайте его как целое (например, используя sscanf) и нажмите как число. В противном случае нажмите как операцию.