LINUX.ORG.RU

История изменений

Исправление Xintrea, (текущая версия) :

Сделал вот так вот, на первый взгляд работает. Во всяком случае тесты в топике проходят правильно:

QStringList FindScreen::textDelimiterDecompose(QString text)
{
  QStringList list;
  int len=text.length();
  QString buf;
  bool quoted=false;

  QString delimiter;
  delimiter.append(" ");
  delimiter.append("'");
  delimiter.append('.');
  delimiter.append(',');
  delimiter.append(';');
  delimiter.append(':');
  delimiter.append('-');
  delimiter.append('?');
  delimiter.append('!');

  for(int i=0; i<len; i++)
  {
    // Если обнаружен разделитель
    if(delimiter.contains( text[i] ))
    {
      if( !quoted )
      {
        if(buf.length() > 0)
        {
          list.append(buf);
          buf = "";
        }
      }
      else
        buf += text[i];
    }
    else if(text[i] == '"')
    {
      quoted = (quoted == true ? false : true);
    }
    else
    {
      buf += text[i];
    }
  }

  if(buf.length() > 0)
    list.append(buf);

  qDebug() << "Find split list:" << list;

  return list;
}

Исходная версия Xintrea, :

Сделал вот так вот, на первый взгляд работает:

QStringList FindScreen::textDelimiterDecompose(QString text)
{
  QStringList list;
  int len=text.length();
  QString buf;
  bool quoted=false;

  QString delimiter;
  delimiter.append(" ");
  delimiter.append("'");
  delimiter.append('.');
  delimiter.append(',');
  delimiter.append(';');
  delimiter.append(':');
  delimiter.append('-');
  delimiter.append('?');
  delimiter.append('!');

  for(int i=0; i<len; i++)
  {
    // Если обнаружен разделитель
    if(delimiter.contains( text[i] ))
    {
      if( !quoted )
      {
        if(buf.length() > 0)
        {
          list.append(buf);
          buf = "";
        }
      }
      else
        buf += text[i];
    }
    else if(text[i] == '"')
    {
      quoted = (quoted == true ? false : true);
    }
    else
    {
      buf += text[i];
    }
  }

  if(buf.length() > 0)
    list.append(buf);

  qDebug() << "Find split list:" << list;

  return list;
}