C
das ist weitestgehend C mit einigen C++ elementen (und ausgerechent denen, die für sich genommen nur geringe vorteile haben - cout,new).
nunja:
#include<iostream>
#include<string.h>
using namespace std;
ok, allerdings, ähm... deprecated... beser:
#include<iostream>
#include<cstring>
using namespace std;
noch besser:
#include<iostream>
#include<string>
using namespace std;
und du verwendest strings und verzichtest auf char-arrays
list *start = new list;
list *prev = new list;
start=NULL,prev=NULL;
ich bin mir sicher, du weisst nicht, was du hier tust...
void out_order_in(list *line, list *ordered_line) {
list *start = new list;
list *prev = new list;
start=NULL,prev=NULL;
while(line!=NULL) {
list *totakeoff = new list;
if(ordered_line == NULL) {
ordered_line = line;
prev = ordered_line;
start = ordered_line;
ordered_line->next = new list;
}
else {
while(ordered_line != NULL) {
if(strcmp(line->string, ordered_line->string)<0) {
prev = line;
line = ordered_line;
ordered_line = ordered_line->next;
}
else if(strcmp(line->string, ordered_line->string)>0) {
ordered_line = line;
line = ordered_line->next;
prev = ordered_line;
}
}
}
totakeoff = line;
line = line->next;
delete totakeoff;
ordered_line = start;
}
}
man kann kaum erahnen, was hier passieren soll... der sinn von prev bleibt jedenfalls im dunkeln, denn genutzt wird es nie
im übrigen besteht hier auf jedenfall die chance einer endlos schleife, falls du zwei gleiche einträge hast, denn dann ist weder
if(strcmp(line->string, ordered_line->string)<0) {
noch
else if(strcmp(line->string, ordered_line->string)>0) {
zutreffend (bzw. selbiges falls line und odered_line zufällig mal gleich sind). andererseits ist das sowieso UB, denn:
ordered_line = line;
// ...
ordered_line->next = new list;
// ...
line = line->next;
und im nächsten durchgang verwendest du fröhlich line->string, obwohl nichts initialisiert wurde.
while(gets(input)!=NULL) {
gets ist böse, richtig, richtig böse...