Strings and Integers?

Orn E. Hansen oe.hansen@oehansen.pp.se
Mon Dec 1 03:36:00 GMT 1997


Alexandre Oliva writes:
 > Orn E Hansen writes:
 > 
 > > I noticed that there is no implementation of String class.
 > 
 > String is part of libg++, that is not included in egcs.  egcs does
 > include libstdc++, that provides a definition of class string in the
 > header file <string>, not <string.h>, that is a C header-file.
 > 
 > There's no equivalent of libg++'s class Integer in the C++ standard
 > library.
 > 

 Since we're at it.

 I find <string> close to unusable :-)  The reason, is that it appears
implemented as "pascal strings"... an example, running the trailing
program will result in this display:

Enter? 4000
Enter? 300
Enter? 50,35
Enter? 0
 =>  4000,00 (4:4000sr/share/i18()
 =>   300,00 (3:300)
 =>    50,35 (5:50,35)

 You'll have to explicidly add '\0' to correct this, in the line...

 str = (*ptr) + '\0';

 While gnu 'String' is implemented, including the extra '\0', the
absence of it, makes defining your own almost preferrable to using
it.  I am assuming that this is a "normal" behaviour? as trying it
on libg++ results in the precise same result...


----- program ----

#include <iostream.h>
#include <string>
#include <list.h>

extern "C" {

#include <stdlib.h>
#include <locale.h>

           };

main()
{
  list<string> lstr;
  list<string>::iterator ptr;
  string str;
  double v;

  setlocale(LC_ALL, "");
  do {
    cout << "Enter? ";
    cout.flush();
    cin >> str;
    v = strtod(str.data(), NULL);
    if (v != 0.0)
      lstr.push_back(str);
  } while (v != 0.0);
  for (ptr = lstr.begin();ptr != lstr.end();ptr++) {
    str = (*ptr);
    v = strtod(str.data(), NULL);
    cout.form(" => %8.2f (%d:%s)", v, str.length(), str.data()) << endl;
  };
}



More information about the Gcc mailing list