C/C++ :: Tokenize Mathematical Expression - Garbage Value In String
Feb 14, 2014
I wrote a program that tries to tokenize a mathematical expression, inserting the tokens in a list of strings. The list is as follows:
typedef struct listOfStrings {
char **array;
int size;
} ListOfStrings;
There is even a function to initialize the listOfStrings. The thing is: I'm printing a token every time it is complete and every time it is inserted in the list. The output is okay. However, when all tokens are processed and I call function print_list_of_strings to print the tokens again, the first token is printed with a leading garbage value if the input for the program is "3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3". How is this possible? The code for printing the list is as follows:
void print_list_of_strings( const ListOfStrings *const lPtr ) {
int i;
int numberOfElements = lPtr->size;
if ( numberOfElements != 0 ) {
for ( i = 0 ; i < numberOfElements ; ++i ) {
[Code] ....
The list just prints --- if it's empty, although this isn't the case for the program I'm writing. Also, if the input is "1 + 2", everything goes fine. The code for inserting at the list is:
int insert_at_end_of_list_of_strings( ListOfStrings *lPtr, const char *const str ){
int lengthOfStr = strlen( str );
int numberOfElements = lPtr->size;
if ( ( ( *( lPtr->array + numberOfElements ) ) = ( char * )malloc( ( lengthOfStr + 1 ) *
[Code] ....
View 5 Replies
ADVERTISEMENT
Jul 23, 2013
I want to add mathematical expression in a binary tree but I have some problems with the algorithm. I found this one:
-If the current token is a '(', add a new node as the left child of the current node, and descend to the left child.
-If the current token is in the list ['+','-','/','*'], set the root value of the current node to the operator represented by the current token. Add a new node as the right child of the current node and descend to the right child.
-If the current token is a number, set the root value of the current node to the number and return to the parent.
-If the current token is a ')', go to the parent of the current node.
Here is the code that I made so far:
template<class T>
void Tree<T>::Expr(Node<T> *node, char expr[], int &i) {
i++;
T x = expr[i];
if(x == '(') {
node = node->Left;
[Code] ....
I know that it is a big mess and it doesn't follow the algorithm but this is the problem. For example if the token is '(' I go to the left child of the current node. Then lets say that the next token in the expression is a number. I add this number to the current node and I must go back. But how can I go back to the parent? I will go back to line 13 and the program will end. What should be the structure that I must use?
View 1 Replies
View Related
Apr 23, 2013
The point of my code is to evaluate a mathematical expression that's already formed in a Binary Search Tree. : ((6+5)-3)*(2/1)=?
I've read other forums and they usually use cout, cin and << >> but I'm still in the learning process so this is basically primitive coding.
Anyway, The recursion is already correct (I think). My problem is how to return char* or should I say an element which has 2 or more digits.
typedef struct cell{
char elem[max];
struct cell *left;
struct cell *right;
}celltype, *node;
node A;
char* evaluate(node *A) //passed as evaluation(&A);
[Code] ....
And the reason that I'm using char is because the operators are also elements in different nodes.
The code above is actually the result when I remembered that you can't return 2-digit char.
The code below is before I remembered that. It works when all results are 1 digit numbers.
typedef struct cell{
char elem;
struct cell *left;
struct cell *right;
}celltype, *node;
node A;
[Code] ....
View 1 Replies
View Related
Apr 20, 2013
I'm trying to "tokenize" a string using std::string functions, but I stored the text in a char array. When I try to convert it to a string, the string has the first character right but the rest is garbage.
// Get value from ListBox.
char selectedValue[256];
memset(selectedValue, NULL, 256);
SendMessage(GetDlgItem(hWnd, IDC_LB_CURRENTSCRIPT), LB_GETTEXT, selectedIndex, (LPARAM)selectedValue);
// Convert to string.
string val(selectedValue);
[Code] ....
View 3 Replies
View Related
May 6, 2013
I want to program an advanced calculator. I'd like to enter some more complex expressions like -17+3*4*(4-sqrt(4) and i want, that mathematical operations are done the correct order, so at first 4-sqrt(4) is calculated, then 3*4*2 and then -17 is subtracted.
Problem 1: Convert a string into a mathematical calculation
Problem 2: Calculate in the correct order
How would I do that (I dont expect perfecly precoded calculators from you, just the way how to do it)
Google search just delivers primitive calculations with entry methods like
Enter first number 1
Enter operator +
Enter second number 2
3
But thats not what i want
View 2 Replies
View Related
Mar 15, 2013
I'm trying to parse, or tokenize strings that follow the program name/command when used command line. I want to use the command followed by a sentence with a period. I know I need to user argv. But how can i parse the command rather than prompting the user for input. The input will be a sentence.
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <sched.h>
#define MAX_SIZE 50
using namespace std;
//function prototypes
void *vowels(void*);
void *constants(void*);
[Code] ....
View 3 Replies
View Related
Apr 17, 2012
I would like to get hold of the code for a function that takes a string as input argument and returns a numerical value, either integer or double, according to the the expression represented by the string. For example the string may look like this:
Code:
"(256 * d3 + d4) * factor - offset"
then the function would calculate the value of
Code:
(256 * d[3] + d[4]) * factor - offset
where d is an integer array, factor and offset are double or int variables or constants. For my application the name for the array can be fixed to be "d", and the names for other variables and constants are known. The closest thing I could find on-line is this:
[URL]
which only does literal integer calculations, no double, no variables or constants. Are there existing code that does what I need or do I have to write my own?
View 2 Replies
View Related
Apr 9, 2012
<IMG border=0 alt="UserDeviceId = 70813215">
Above is the sample string object from this i need to find the integer value of UserDeviceId.
View 2 Replies
View Related
Dec 5, 2014
like other programmers I am also new to the world of programming. So, I have to use a mathematical function in Cmath.
The function is z1 = Sin2α + sin5α - Sin3α / cosα+1-2sin*2(2α)
z2= √x*3 + 3 / x*3 - 3
My results so far...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
[Code].....
View 6 Replies
View Related
Feb 17, 2014
I need to take an array, and get the inverse of it (basically, just how you would take an inverse of a function in math). I need to do it where, if a[i] = x, b[x] = i. I would just copy from array a to array b in a function.
View 10 Replies
View Related
Apr 21, 2014
I've just started coding a "Mathematics" library for my own, just to practice some OOP concepts, but sadly I didn't get too far with it before the first errors appeared. That is, I created a Matrix.H and Matrix.CPP file (separate class) in a "Linear Algebra" folder.
However, when I run the code I get the following (linker?) error:
#include <iostream>
#include "Matrix.h"
using namespace std;
int main() {
Matrix<int> A(7,5);
int row[] = {5, 10, 9, 11, -5};
[Code] ....
I am using Visual Studio 2012 (stating this in case it could be related to the reason for which I get the error).
View 2 Replies
View Related
Feb 11, 2015
I'm working on a class project, and I'm having a difficulty. Suppose I have: string a = "21" and string b = "30"; normally, a+b=2130 (i.e concatenation of the characters in the string) but suppose I want a+b=51 (i.e. numerical addition) how do I go about this?
View 1 Replies
View Related
Jul 10, 2014
I've been assigned to build a program which completes mathematical operations using matrices. I have to use dynamically allocated 2d arrays, and can only use * to dereference and not []. I have this code so far, but the multiply_matrix function does not work with most values. I've looked at other similar posts, which have a similar algorithm to mine, but mine does not work for some reason.
/*
*(*matrix(matrix+i)+j)
*/
#include <iostream>
//for sleep() which allows user to see messages before screen is cleared
#include <unistd.h>
using namespace std;
[Code] .....
View 1 Replies
View Related
Nov 24, 2013
How do I print a mathematical series such as
1 + 2/2! - 3/3! + ...... n/n! //n is read from user
Not only we need to print the series on the screen but at the same time find the sum using simple loops.
View 1 Replies
View Related
Jan 29, 2015
So i have this code:
if (get_brick_at(Position(row, column)) == NULL)
Where get_brick_at is defined like this:
>Brick& get_brick_at(const Position & p) {
return board[p.get_row()][p.get_column()];
}
Now, of course this does not work since the compiler cannot convert from long int to a Position. So how do i know if the return value of get_brick_at is garbage?
I also have a couple of other situations where i want to return some kind of NULL-like value under certain circumstances.
My question is: How do i handle situations like that?
View 5 Replies
View Related
May 1, 2013
Code:
// Lab0Inventory.cpp : Starter lab
//Anastasia Glyantseva
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>
[Code]....
I can't figure out why my makeString gets called first and the pString its called with contains garbage. I want my allocateMem to get called first, but my program is not going to that. What is wrong with the order of my code?
View 3 Replies
View Related
Mar 21, 2013
Im programming client/server app that client provide the file name then the server send it to client then the client will save it ..this is part of code in client
Code:
char buffer[1024];
printf("FIle is being downloaded ...
");
printf("%s
",buffer);
}
[code],...
So i have 2 problems ::
1st one is when i write to file the file permission i cant define it with data type mode_t ,so the file does not open at all after creation...
2nd one is: the data in buffer is less than 1024 ,the data wrote to buffer but with garbage data . How to make the file read only the real data with garbage ??
View 5 Replies
View Related
Mar 23, 2013
I'm working on my program that takes input of the employees' first and last name, their payrate, their deferred from check and also the amount of hours they have worked which then the gross is calculated and also the taxes are calculated by an external function. In the program design it is necessary to put arrays which I have done, but when i compile I receive warning messages
Code: warning: format '%s' expects argument of type 'char*', but argument 3 has type 'double'
Warning: format '%f' expects a matching 'double' argument [-Wformat] which I believe is causing my program to just give me garbage when I run it. What do those warnings mean?
Code:
/* Name: Arturo
Date: 03/22/13
Purpose: To learn
*/
extern void calculate taxes(float gross,float deferred, float *ft, float *st, float ........i);
void ovtHrs(float *hrs_wrk, float *ovt_hrs, float hrs, float *gross, float payrate);
void netPay(float gross, float deferred, float ft, float st, float ssi, float *net);
[Code] .....
View 9 Replies
View Related
Mar 20, 2013
Here's my code:
struct Member {
char *name;
char *address;
char Interests[][10];//<------problem
int numofInterests;
Numbers digits;
[Code] ....
Now the Program:
newMember.Interests[numofInterests];
newMember.numofInterests = numofInterests;
for(int i = 0; i < numofInterests; i++) {
printf("Enter %s's %i interest: ", newMember.name, (i+1));
[Code] ....
it's a array of cstrings, but i can't figure out how keep it from outputting garbage, i'm assuming it's because i didn't end it with a null terminator but when i did, it didn't work.
View 1 Replies
View Related
Apr 30, 2012
I have a program that runs fine but outputs garbage and skips processes when I input a decimal. It compiles fine and has no errors.
Code:
#include <iostream>
#include <float.h>
using namespace std;
int main() {
int x;
int y;
[Code] ....
View 4 Replies
View Related
Jun 27, 2013
Code:
#include <stdio.h>
#include <stdlib.h>
// Define doubly linked list structures
typedef struct link singleLink;
typedef struct trashLink singleTrashLink;
struct link {
[Code] ....
Alright, my code is almost complete, I just can't get the clearFromList function to work correctly.
Here's what the program does, in a nutshell:
- Create two doubly-linked lists, one to hold numbers 0 through i, the other to hold a randomly generated list of numbers no greater than i to be "trashed". The same number cannot be "trashed" twice.
- Go through the main doubly-linked list and "skip over" the numbers that are listed the trash doubly-linked list (i.e. "delete" them without actually freeing them).
- Free both lists at the end.
I still have to free the trash list, but that's easy. I'm just stuck getting the clearFromList function to "skip over" each number in the main list that is added to the trash list.
View 3 Replies
View Related
Mar 22, 2013
The program works, other than if I place the cursor below the last line in my merch file, the program outputs a line of garbage. The only solution I could find is to leave the cursor on the last line.
Code:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct vRecord {
string venue, item;
float price;
[Code]...
View 2 Replies
View Related
Jun 21, 2014
I have a class that uses std::vector. I push back class objects onto the vector but when I try to cout the data members (with get functions) I get garbage values.
Here is the class:
#ifndef JOBS_H
#define JOBS_H
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
using namespace std;
class Jobs{
[Code] ....
I know I am missing the implementation of several functions but I'm just testing my vector to see if it is working and it isn't. The getBlockValue() function should output 0 for each job. When I push back one object the output is 0. When I push back 2 objects the output is 0. However when I push back 3 objects I get random values. Why is this? I thought vectors were dynamic?
View 8 Replies
View Related
Feb 1, 2013
How do I detect garbage chars in a CString. Actually I'm reading some data from COM port. In some certain condition it will give some garbage as a version no. Now I need to show _T("N/A") in case of there is any garbage.
My solution is to check for a Valid char or integer. If found its correct else Garbage.
View 11 Replies
View Related
Jan 20, 2014
This code works very oddly.
Code:
#include <algorithm>
#include <cstdlib>
#include <iostream>
[Code].....
View 14 Replies
View Related
Jun 15, 2014
changing a 9 digit integer into a new 9 digit integer through simple mathematical operations. For example, I need to change 123456789 into the new digit 456123789. Sometimes I need to change a 9 digit integer into an 8 digit integer. An example is 789062456 into 62789456. I can ONLY use simple mathematical operations (addition, subtraction, multiplication, division and modulo).
View 4 Replies
View Related