alphabetical order problem
Feb 16, 2009 at 4:51pm UTC
i have a problem with this program it is something wrong with the alhabetic order
instead of a b c d e ...it will read.. b a c d e something is wrong with my pointers but i cant figure it out ..
can someone please look at this for me.
thank you
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
#include <iostream>
#include <fstream>
using namespace std;
ifstream infile;
typedef struct node
{
string data;
node *next;
}lnode;
bool found;
string name;
lnode *head = NULL, *current = NULL, *after = NULL, *before = NULL, *tail = NULL;
int main()
{
infile.open("intext.txt" );
infile >> name;
while (!infile.eof( ))
{
found = false ;
while (!found)
{
if (head == NULL)
{
head = new lnode;
head->data = name;
head->next = NULL;
before = head;
found = true ;
}
else if ((name <= before->data) && (!found))
{
lnode *temp = NULL;
temp = new lnode;
temp->data = name;
temp->next = head;
head = temp;
found = true ;
}
else if (((name > before->data) && (!found)) && (before->next == NULL))
{
current = new lnode;
current->data = name;
before->next = current;
current->next = NULL;
found = true ;
}
else if ((name > before->data) && (!found))
{
after = before->next;
if ((name > before->data) && (name< after->data))
{
current = new lnode;
current->data = name;
current->next = after;
before->next = current;
found = true ;
}
else
{
before = after;
after = before->next;
}
}
else if (((name > after->data) && (after->next != NULL)) && (!found))
{
before = after;
after = before->next;
}
else if (((name > after->data) && (after->next == NULL)) && (!found))
{
current = new lnode;
current->data = name;
after->next = current;
current->next = NULL;
found = true ;
}
}
infile >> name;
}
current = head;
while (current != NULL)
{
cout << current->data<<endl;
current = current->next;
}
infile.close();
system ("pause" );
return 0;
}
Last edited on Feb 16, 2009 at 5:46pm UTC
Feb 16, 2009 at 7:02pm UTC
Running fine on gcc compiler.
Feb 16, 2009 at 8:57pm UTC
this is the program. if you input a b c d only outputs a b d. and i cant figure out why the c is not outputting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
#include <iostream>
#include <fstream>
using namespace std;
ifstream infile;
void read(string name);
void palindrome(string name);
typedef struct node
{
string data;
node *next;
}lnode;
bool found;
string name;
int main()
{
string name;
infile.open("intext.txt" );
read(name);
infile.close();
system ("pause" );
return 0;
}
void read(string name)
{
lnode *head = NULL, *current = NULL, *after = NULL, *before = NULL, *tail = NULL;
infile >> name;
while (!infile.eof( ))
{
found = false ;
while (!found)
{
if (head == NULL)
{
head = new lnode;
head->data = name;
head->next = NULL;
before = head;
found = true ;
}
else if ((name <= before->data) && (!found))
{
lnode *temp = NULL;
temp = new lnode;
temp->data = name;
temp->next = head;
head = temp;;
found = true ;
}
else if (((name> before->data) && (!found)) && (before->next == NULL))
{
current = new lnode;
current->data = name;
before->next = current;
current->next = NULL;
found = true ;
}
else if ((name > before->data) && (!found))
{
after = before->next;
if ((name > before->data) && (name < after->data))
{
current = new lnode;
current->data = name;
current->next = after;
before->next = current;
found = true ;
}
else
{
before = after;
after = before->next;
}
}
else if (((name> after->data) && (after->next != NULL)) && (!found))
{
before = after;
after = before->next;
}
else if (((name > after->data) && (after->next == NULL)) && (!found))
{
current = new lnode;
current->data = name;
current->next = NULL;
after->next = current;
found = true ;
}
palindrome( name);
cout<<endl;
infile >> name;
}
}
current = head;
while (current != NULL)
{
cout << current->data;
current = current->next;
cout<<endl;
}
}
void palindrome(string name)
{
const string str1(name);
string str2(str1.begin(),str1.end());
cout << str1 << endl;
reverse (str2.begin(), str2.end());
if (!str1.compare(str2))
cout << " a palindrome" << endl;
else
cout << "not a palindrome" << endl;
}
Feb 17, 2009 at 12:36am UTC
can any 1 find out what is wrong with this program
Feb 17, 2009 at 5:34pm UTC
Why don't you add some debug prints to show how the inserts are occurring? This should help you figure out on which insert the problem is happening.
Topic archived. No new replies allowed.