Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5183 in orxonox.OLD for trunk/src/lib/util/substring.cc


Ignore:
Timestamp:
Sep 15, 2005, 1:01:00 AM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: SubString now also can split by whiteSpaces :>
this cost me almost 2 hours… sometimes i think, that i am unable to think…. :/
other times it just works, like when learning some Information Transfer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/util/substring.cc

    r5150 r5183  
    5252  {
    5353    const char* offset = string;
    54     char* end = strchr( string, splitter);
     54    const char* end = strchr( string, splitter);
    5555    while( end != NULL)
    5656    {
     
    6060      assert( strings[i] != NULL);
    6161      strncpy( strings[i], offset, l);
    62       strings[i][l] = 0;
     62      strings[i][l] = '\0';
    6363      i++;
    6464      end++;
     
    7474  else
    7575  {
    76     this->strings[0] = new char[strlen(string)];
     76    this->strings[0] = new char[strlen(string)+1];
    7777    strcpy(this->strings[0], string);
     78  }
     79}
     80
     81
     82/**
     83 * Splits a String into a Substring removing all whiteSpaces
     84 * @param string the String to Split
     85 * @param whiteSpaces MUST BE __TRUE__
     86 *
     87 */
     88SubString::SubString(const char* string, bool whiteSpaces)
     89{
     90  this->splittersCount = 0;
     91  if (string == NULL || whiteSpaces == false)
     92  {
     93    this->strings = NULL;
     94    return;
     95  }
     96
     97  // chop the input to the beginning of something usefull
     98  if (strlen(string) > 0)
     99    string = string + strspn(string, " \t\n");
     100
     101  // count the Splitters
     102  bool lastWasWhiteSpace = false;
     103  for(unsigned int i = 0; i < strlen(string); i++)
     104    if( string[i] == ' ' || string[i] == '\t' || string[i] == '\n' )
     105      lastWasWhiteSpace = true;
     106    else
     107    {
     108      if (lastWasWhiteSpace)
     109        this->splittersCount ++;
     110      lastWasWhiteSpace = false;
     111    }
     112
     113  this->splittersCount += 1;
     114
     115  printf("splitterCount = %d\n", this->splittersCount);
     116
     117  this->strings = new char*[this->splittersCount];
     118  assert (strings != NULL);
     119
     120  int l = 0;
     121  unsigned int i = 0;
     122  if( this->splittersCount > 1)
     123  {
     124    const char* offset = string;
     125    const char* end = offset + strcspn(offset, " \t\n");
     126    for (i = 0; i < this->splittersCount; i++)
     127    {
     128      assert( i < this->splittersCount);
     129      l = end - offset;
     130      this->strings[i] = new char[l + 1];
     131      assert( strings[i] != NULL);
     132      strncpy( strings[i], offset, l);
     133      strings[i][l] = '\0';
     134      end += strspn(end, " \t\n");
     135      offset = end;
     136      printf("'%s'\n", end);
     137      end = offset + strcspn(offset, " \t\n");
     138    }
     139  }
     140  else
     141  {
     142    unsigned int length = strcspn(string, " \t\n");
     143    this->strings[0] = new char[length+1];
     144    strncpy(this->strings[0], string, length);
     145    this->strings[0][length] = '\0';
    78146  }
    79147}
     
    86154  if (this->strings)
    87155  {
    88     for( int i = 0; i < this->splittersCount; i++)
     156    for(unsigned int i = 0; i < this->splittersCount; i++)
    89157      delete[] this->strings[i];
    90158    delete[] this->strings;
     
    105173}
    106174
    107 
    108 
    109175/**
    110176 * Some nice debug information about this SubString
     
    113179{
    114180  PRINT(0)("Substring-information::count=%d ::", this->splittersCount);
    115   for (int i = 0; i < this->splittersCount; i++)
    116     PRINT(0)("s%d:%s::", i, this->strings[i]);
     181  if (this->strings != NULL)
     182    for (unsigned int i = 0; i < this->splittersCount; i++)
     183     PRINT(0)("s%d='%s'::", i, this->strings[i]);
    117184  PRINT(0)("\n");
    118185}
Note: See TracChangeset for help on using the changeset viewer.