crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> разбиение строк!, помогите правильно разбить строку на слова и выбросить лишнее
piccoola
  опции профиля:
сообщение 24.8.2011, 20:24
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 24.8.2011
Пользователь №: 2829

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаu
idhnr902Zвtyujnd734Zрекеouthck5520Zрак
QRegExp reg (":[0-9]{3}Z");
QStringList lines = text.split(reg);
if(int j =text.indexOf(reg))
{
foreach (QString line, lines)
{
int i = j - 6;
int k = 0;
QString newline = line.mid(k-i).left(i);
return newline;
}
}


помогите пожалуйста разобраться, а то я совсем запуталась, надо разбить строку на другие строки и убрать лишние символы. я пробовала, пробовала и ника, там кусок того, что у меня получилось, но не работает(( выводит только первое слово отдельно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 25.8.2011, 14:19
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2886
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата
убрать лишние символы.

а какие символы считаются лишними ? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 25.8.2011, 15:36
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 25.8.2011, 15:19) *
Цитата
убрать лишние символы.

а какие символы считаются лишними ? :)

Цитата(piccoola @ 24.8.2011, 21:24) *
Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаu
idhnr902Zвtyujnd734Zрекеouthck5520Zрак

Ехал грека через реку видит в реке рак - мне кажется ему это надо получить остальное выкинуть
QString r = "Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zг
рекаuidhnr902Zвtyujnd734Zрекеouthck5520Zрак"
return r.remove(QRegExp("[0-9][a-z][A-Z]")); что то придумал с ходу, мб я с RegExp напутал

Цитата(piccoola @ 24.8.2011, 21:24) *
Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаu
idhnr902Zвtyujnd734Zрекеouthck5520Zрак
QRegExp reg (":[0-9]{3}Z");
QStringList lines = text.split(reg);
if(int j =text.indexOf(reg))
{
foreach (QString line, lines)
{
int i = j - 6;
int k = 0;
QString newline = line.mid(k-i).left(i);
return newline;
}
}


помогите пожалуйста разобраться, а то я совсем запуталась, надо разбить строку на другие строки и убрать лишние символы. я пробовала, пробовала и ника, там кусок того, что у меня получилось, но не работает(( выводит только первое слово отдельно...

а зачем ты дела QString newline = line.mid(k-i).left(i); ??
если хочешь склеить list и получить string тогда не проще ли будет
QString newline;
foreach (QString line, lines)
{
newline+= line;
}
return newline;

Сообщение отредактировал MJIbIu - 25.8.2011, 15:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 25.8.2011, 17:43
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


   
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QString str = "Ехалsghffg000:Zгрекаyfhkkl907Zчерезdxsvhy897Zрекуtyfdvh657Zвидитighjky843Zгрекаuidhnr902Zв
tyujnd734Zрекеouthck5520Zрак";
QString temp = "";
for (int i=0; i < str.length(); i++) {
      //собираем слово по буквам, оставляю только русские
      //1040 - код символа 'А', 1103 - 'я'
      if (str[i].unicode() >=1040 && str[i].unicode() <=1103) {
         temp = temp + str[i];
      }
      //сбрасываем слово в текстовое поле
      else if (temp != "") {
         widget.textEdit->append(temp);
         temp="";
      }
}
//если строка кончалась на русскую букву то в цикле последнее слово не успеет сброситься поэтому осуществляем проверку
if (temp != "") {
      widget.textEdit->append(temp);
      temp="";
}

Теперь каждое слово в отдельной строке.

Цитата(MJIbIu)
QRegExp("[0-9][a-z][A-Z]")

двоеточие забыли убрать)
Вы пошли от обратного, а это с моей точки зрения, в данном случае, не совсем хорошо, ибо вдруг текст в юникоде, тогда помимо английских букв, цифр и знаков препинания может встретится очень много других символов.

P.S. Да буду очень признателен, если мне объяснят почему вот так работает:
if (str[i] >='A' && str[i] <='Z')

а вот так нет:
if (str[i] >='А' && str[i] <='Я')


Сообщение отредактировал ilyabvt - 25.8.2011, 18:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.8.2011, 5:42
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(ilyabvt @ 25.8.2011, 20:43) *
а вот так нет:
символы с кодами выше latin1 требуют дополнительных телодвижений, так же как и вывод русского текста на виджетах, ....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 26.8.2011, 9:55
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата(Litkevich Yuriy @ 26.8.2011, 9:42) *
символы с кодами выше latin1 требуют дополнительных телодвижений, так же как и вывод русского текста на виджетах, ....

Раскрывающийся текст

Ну для вывода русского на виджетах достаточно:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

А какие телодвижения нужны тут? Хотя конечно можно написать например так:
if (QString(str[i]) >="А" && QString(str[i]) <="я")

но это не совсем то что я искал.
P.S. прошу прощения за вопросы немного не по теме.


Сообщение отредактировал ilyabvt - 26.8.2011, 10:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.8.2011, 20:30
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


ilyabvt, ну если у тебя кодировка исходника задана явно, то имеет смысл обсудить. Тему после разделю (главное не смешивать в сообщениях, я их не могу разделить).

Яб так делал:
if (str[i] >=QChar('А') && str[i] <=QChar('Я'))
Попробуй, будет ли польза?

И, собственно, что значит не работает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 26.8.2011, 21:37
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
Яб так делал:
if (str[i] >=QChar('А') && str[i] <=QChar('Я'))
Попробуй, будет ли польза?

Я уже так пробовал. Не помогает.
Не работает, значит, даже если символ находиться в указанном диапазоне он все равно не проходит проверку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 27.8.2011, 7:24
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.8.2011
Из: Калининград
Пользователь №: 2798

Спасибо сказали: 6 раз(а)




Репутация:   0  


Может быть вот так
if (str[i] >='а' && str[i] <='п' || str[i] >='р' && str[i] <='я')
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.8.2011, 10:37
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(ilyabvt @ 27.8.2011, 0:37) *
он все равно не проходит проверку
условие ложно или наоборот истино?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.9.2019, 15:10