1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C++ word ladder program

  1. Feb 19, 2007 #1

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Hi, I'm working on a word ladder program outlined here:
    http://www.pic.ucla.edu/~nathan/cgi-bin/moin.cgi/la4

    To get started, I am just trying to read words from a file and put them into a vector of "node"s (a struct we were given to use).

    So far I've only been able to read in each word and place it in a vector of strings(below). Getting them into a vector of nodes is going to be more challenging. I'm a little stuck because I'm having trouble figuring out how to work with a node's previous pointer. I'm also confused about whether the nodes of the vector hold will words or only pointers to words.(If only pointers, then where are the words stored?) The diagram of the vector is giving me trouble.

    Here's what I did so far. Any help is appreciated. Thanks.

    Code (Text):

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    using namespace std;

    struct Wnode {string word; Wnode * prev;};

    int main ()
    {
        vector<string> v;  
        string word;   
        ifstream in("example.txt");

        if (in.is_open())
        {
            while(!in.eof())
            {
                in >> word;
                v.push_back(word);
                cout << word << " "; //just a test             
            }
            in.close();
        }
        else cout << "Unable to open file";
        cout << v[0] <<v[1] << v[2]; //test printing vector

    //messing around with nodes
        Wnode w;   
        //w.prev -> NULL; //doesn't work
        w.prev = NULL;
        w.word = "one";

        Wnode x;
        //x.prev -> w; //doesn't work
        x.word = "two";
        return 0;
    }
     
     
  2. jcsd
  3. Feb 19, 2007 #2

    Hurkyl

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Hrm, that file i/o code doesn't give you an extra, empty word at the end of your list?


    The definition of Wnode settles that question, doesn't it?


    Is it? You just put the words in your nodes, and the nodes in your vector.

    Anyways, why are you making a vector of nodes? There are reasons one might do that, but your homework assignment isn't suggesting you do such a thing.


    Well, let's deconstruct this expression.

    w is an (uninitialized) object of type Wnode.

    A Wnode has a member named prev of type Wnode*.

    Therefore, w.prev is an uninitialized object of type Wnode*.

    Wnode does not have a member named NULL.

    Therefore, w.prev->NULL attempts to reference a nonexistent field of the object Wnode object to which w.prev points.


    And, as additional logic errors, w.prev is an uninitialized pointer, so attempting to dereference it leads to undefined behavior. And if w.prev was initialized, and Wnode did have a member named NULL, the expression w.prev->NULL would do nothing.



    (P.S. have you ever made a linked list before?)
     
    Last edited: Feb 19, 2007
  4. Feb 19, 2007 #3

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    I have, actually, and I think that's part of my confusion. I was thinking about it when I was working on this and I think I've forgotten how it all works!:redface: (not that I understood it that well to begin with)

    Thanks for breaking it down.
     
  5. Feb 19, 2007 #4

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    so I guess this is legal:

    Wnode w;
    w.prev = NULL;
    w.word = "one";

    Wnode x;
    x.prev = &w;
    x.word = "two";
     
  6. Feb 19, 2007 #5

    Math Is Hard

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    eeyay! got it! (the part I was trying to do anyway)

    thanks, Hurkyl!
     
  7. Feb 19, 2007 #6

    Hurkyl

    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Yay! :smile:
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: C++ word ladder program
  1. Need wording clarified (Replies: 1)

  2. Java - Word Counter (Replies: 16)

Loading...