crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Перевод QString в другие типы
bigory
  опции профиля:
сообщение 12.2.2011, 14:10
Сообщение #1


Студент
*

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

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




Репутация:   0  


Всем доброе врем суток!
Не знаю, есть ли смысл или нет, но мне нужно перевести тип из QString в String. Дело в том, что мне нужно рассматривать символы, которые записаны в строку как массив символов, т.е. строка а, нужно вывести только символ из строки а[i], или a[от i до i+4]. Почему то на такой код:

QString a="Строка";
Далее, код ображения к a[2], т.е. к символу "р" выдает ошибку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kin63camapa
  опции профиля:
сообщение 12.2.2011, 14:48
Сообщение #2


Студент
*

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

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




Репутация:   1  


Цитата(bigory @ 12.2.2011, 14:10) *
Далее, код ображения к a[2], т.е. к символу "р" выдает ошибку.

Код в студию, как именно обращаешься


и ещё ты обращаешься к символу 'т' если что, ибо в кирилице по 2 байта на символ


а именно к 1 его байту
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 12.2.2011, 14:50
Сообщение #3


Студент
*

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

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




Репутация:   0  


У меня ситуация такая, есть форма, на форме таблица, где размещены данные. При вызове search2(), ищется заданное вхождение алфавита в таблице
void MainWindow::search2()
{
      QString text = dialog1->lineEdit->text();
      for (int j=0; j<tableWidget->rowCount(); ++j)
              {
                  QString text1=tableWidget->item(j,0)->text();
                  for (int k=0; text1[k]; ++k)
                  if (text1[k]==text)
                  {

                      tableWidget->setCurrentCell(j,0);
                  }
              }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kin63camapa
  опции профиля:
сообщение 12.2.2011, 15:00
Сообщение #4


Студент
*

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

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




Репутация:   1  


Цитата(bigory @ 12.2.2011, 14:50) *
for (int k=0; text1[k]; ++k)

Прога не грохается когда k становится больше чем колличество байт в строке? вообще не понятно до каких пор такой цикл должен выполняться

Похоже вы хотели написать так
for (int k=0; k<text1.size(); ++k)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.2.2011, 15:05
Сообщение #5


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(kin63camapa @ 12.2.2011, 15:00) *
Прога не грохается когда k становится больше чем колличество байт в строке? вообще не понятно до каких пор такой цикл должен выполняться

А ты вспомни, что вернет text1[k] при достижении конца строки и при каких условиях заканчивается цикл for.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 12.2.2011, 15:07
Сообщение #6


Студент
*

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

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




Репутация:   0  


Не, не грохается, она жалуется на массив:
no match for 'operator==' in 'textl.Q5tring::operator[](k) == text'

Не знаю как в Qt, но в обычном С++ любая строка заканчивается 0, и условие text1[k] подразумевает пока text1[k]!=0, т.е. истина, работа цикла продолжается
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kin63camapa
  опции профиля:
сообщение 12.2.2011, 15:14
Сообщение #7


Студент
*

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

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




Репутация:   1  


Цитата(BRE @ 12.2.2011, 15:05) *
А ты вспомни, что вернет text1[k] при достижении конца строки

может и мусор вернуть если у нас оператор [] не переопределён

Цитата(bigory @ 12.2.2011, 15:07) *
Не, не грохается, она жалуется на массив:
no match for 'operator==' in 'textl.Q5tring::operator[](k) == text'

Не знаю как в Qt, но в обычном С++ любая строка заканчивается 0, и условие text1[k] подразумевает пока text1[k]!=0, т.е. истина, работа цикла продолжается

по тому что сравниваете char и QString приведение типов вам в руки
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 12.2.2011, 15:18
Сообщение #8


Студент
*

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

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




Репутация:   0  


И как перевести в нужный тип?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kin63camapa
  опции профиля:
сообщение 12.2.2011, 15:19
Сообщение #9


Студент
*

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

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




Репутация:   1  


зы
Цитата
но мне нужно перевести тип из QString в String

a.toStdString();



Цитата(bigory @ 12.2.2011, 15:18) *
И как перевести в нужный тип?

смотря что вы хотите, если сравнить символы между собой то приводите в char если строки то тут масса вриантов
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bigory
  опции профиля:
сообщение 12.2.2011, 15:24
Сообщение #10


Студент
*

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

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




Репутация:   0  


Мне нужно из строки abctrjhaabccctn, найти вхождение aab
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.4.2024, 0:43