poly strtok

#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> const int MAX = 100; struct monom { bool sign; char incl[10]; }; bool plusminus(char a[]) { int i; for ( i = 0; i < strlen(a); i++) { if (a[i] = '-') return true; else return false; } } int analys1(char a[])//анализирует моном и выдает номер в итоговом массиве коэфицентов { bool x = false; int i, answ, c; for (i = 0; i < strlen(a); i++) if (a[i] == 'x') { x = true; c = i; } if (x = false)//если нет х, т.е свободный член answ = 0; else { if ((c == strlen(a)) || (a[c + 1] != '^') || (a[c + 1] != 'x')) answ = 1; if ((a[c + 1] == 'x') || ((a[c + 1] == '^')&& (a[c + 1] == '2'))) answ = 2; if (((a[c + 1] == 'x') && (a[c + 2] == 'x')) || ((a[c + 1] == '^') && (a[c + 2] == '3')) || ((a[c + 1] == '^') && (a[c + 2] == '2') && (a[c + 3] == 'x')) || ((a[c + 1] == 'x') && (a[c + 2] == '^') && (a[c + 3] == 'x'))) answ = 3; } } int analys2(char a[])//анализирует моном и выдает коэффицент в итоговом массиве коэфицентов { bool x = false; int i, answ; char c[]="/////"; for (i = 0; i < strlen(a); i++) if (a[i] == 'x') x = true; if (x = false)//если нет х, т.е свободный член answ = atoi(a); else { while (a[i + 1] != 'x') { c[i] = a[i]; } answ = atoi(c); } } int main() { int COEF[5], i, j,k; //коэфициенты при соотв степенях х monom A_plus[6], A_minus[6]; char str[] = "45+x4-sss+4"; printf("razdelenie stroki \"%s\" na lexemy.", str); char *pch_plus = strtok(str, "+"); //во втором параметре указаны разделители (пробел, запятая, точка) printf("\nlexemy:"); for (i = 0; i < 6; i++) { A_plus[i].sign = true; A_minus[i].sign = true; for (j = 0; j < 6; j++) { A_plus[i].incl[j] = 0; A_minus[i].incl[j] = 0; } } for (i = 0; i < 6; i++) COEF[i] = 0; i = 0; while (pch_plus != NULL) //пока есть лексемы { printf("\n%s", pch_plus); for (j = 0; j < strlen(pch_plus); j++) { A_plus[i].incl[j] = pch_plus[j]; } pch_plus = strtok(NULL, "+"); i++; } printf("\n"); i = 0; for (i = 0; i < 6; i++) { if (plusminus(A_plus[i].incl))//если в отделенном мономе есть минус { char *pch_minus = strtok(A_plus[i].incl, "-"); while (pch_minus != NULL) //пока есть лексемы { printf("\n%s", pch_minus); for (k = 0; k < strlen(pch_minus); k++) { A_minus[j].incl[k] = pch_minus[k]; } pch_minus = strtok(NULL, "-"); j++; } } } //отделение мономов с минусами for (i = 0; i < 6; i++) { char *pch_minus = strtok(A_plus[i].incl, "-"); while (pch_minus != NULL) //пока есть лексемы { printf("\n%s", pch_minus); for (k = 0; k < strlen(pch_minus); k++) { A_minus[j].incl[k] = pch_minus[k]; } pch_minus = strtok(NULL, "-"); j++; } } for (i = 0; i < 6; i++)//заполнение массивов коэфицентов { COEF[analys1(A_plus[i].incl)] = COEF[analys1(A_plus[i].incl)]+ analys2(A_plus[i].incl); COEF[analys1(A_minus[i].incl)] = COEF[analys1(A_minus[i].incl)] + analys2(A_minus[i].incl); } for (i = 0; i < 6; i++)//печать массива мономов { for (j = 0; j < 6; j++) { printf("%c", A_minus[i].incl[j]); } printf("\n"); } for (i = 0; i < 5; i++) //печать приведенного полинома { printf("%ix^3%ix^2%ix%i", COEF[3], COEF[2], COEF[1], COEF[0]); } getchar(); return 0; } /* strncpy(m3, m1, 6); // не добавляет '\0' в конце строки strcpy(m3, m1); strncat(m3, m2, 5); strcat(m3, m2); strnset(m3, 'f', 7); strset(m3, 'k'); */

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.