Russian Qt Forum
Ноябрь 26, 2024, 06:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 ... 11   Вниз
  Печать  
Автор Тема: string и startsWith  (Прочитано 61242 раз)
Spark
Гость
« : Май 20, 2013, 07:01 »

Доброго времени суток всем!
Мало, что понимаю в QT и C++, да и в программировании Улыбающийся. Не судите строго. Но самый простой способ уложить, что то в голове это примеры.

Возникла необходимость сделать, примерно, такую конструкцию:

string word("hello");
QString str = word;
if ( str.startsWith("h") )

Выдает ошибку: conversion from 'std::string' to non-scalar type 'QString' requested

Понятно, что не правильно. А как правильно? Просьба, если кто откликнется, пояснить это простым языком с простым примером, если это возможно.

Или использовать иной вариант для ситуации:
- Есть некоторая строковая переменная string str.
- Необходимо выполнить условие if если эта переменная начинается c определенных символов.

Спасибо за помощь
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Май 20, 2013, 07:15 »

Код
C++ (Qt)
QString str = word.c_str();
Записан
Spark
Гость
« Ответ #2 : Май 20, 2013, 07:32 »

Спасибо! Не представляете как я счастлив Улыбающийся. Так все просто оказалось. Лучше все таки спросить, чем потратить несколько вечеров на эксперименты, пытаясь учить C++ конца Улыбающийся.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #3 : Май 20, 2013, 09:56 »

Можно и без QString это сделать:

Код
C++ (Qt)
std::string word = "hello";
if (!word.find_first_of("hH")) {
...
}
 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #4 : Май 20, 2013, 09:58 »

Спасибо! Не представляете как я счастлив Улыбающийся. Так все просто оказалось. Лучше все таки спросить, чем потратить несколько вечеров на эксперименты, пытаясь учить C++ конца Улыбающийся.

Лучше всё-таки, потратить несколько вечеров на эксперименты, изучая плюсЫ)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 20, 2013, 09:59 »

Можно и без QString это сделать:

Код
C++ (Qt)
std::string word = "hello";
if (!word.find_first_of("hH")) {
...
}
 
А если понадобится без учета регистра?  Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #6 : Май 20, 2013, 10:00 »

Можно и без QString это сделать:

Код
C++ (Qt)
std::string word = "hello";
if (!word.find_first_of("hH")) {
...
}
 
А если понадобится без учета регистра?  Улыбающийся

Ну дык это и есть, без учёта регистра)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
thechicho
Гость
« Ответ #7 : Май 20, 2013, 10:39 »

if (!word.find_first_of("hH")) {

Return Value
The position of the first character that matches.
If no matches are found, the function returns string::npos.
static const size_t npos = -1;

объясните, как это логическое выражение работает? учитывая, что false, это вроде как 0(zero)
Записан
mutineer
Гость
« Ответ #8 : Май 20, 2013, 10:42 »

Если символ найден в позиции 0, то значение выражения true. В остальных случаях false
Записан
thechicho
Гость
« Ответ #9 : Май 20, 2013, 10:45 »

word.find_first_of("hH") вернет 0, если строка начинается с hH?

if (!0) {
не понимаю, как это выражение работает.

и еще вопрос. ("hH") - поиск будет поочередно? или сначала поиск пройдет по h, по всей строке, а потом по H?
что вернет функция, если строка будет "Hello hello". 0 или 6?
Записан
thechicho
Гость
« Ответ #10 : Май 20, 2013, 10:48 »

//Если символ найден в позиции 0, то значение выражения true. В остальных случаях false

все понял. если функция возвращает 0 (false), то код отработает
if (!0) {
}
Записан
mutineer
Гость
« Ответ #11 : Май 20, 2013, 10:48 »

if (!0) {
не понимаю, как это выражение работает.
учитывая, что false, это вроде как 0(zero)
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #12 : Май 20, 2013, 11:03 »

word.find_first_of("hH") вернет 0, если строка начинается с hH?

if (!0) {
не понимаю, как это выражение работает.

и еще вопрос. ("hH") - поиск будет поочередно? или сначала поиск пройдет по h, по всей строке, а потом по H?
что вернет функция, если строка будет "Hello hello". 0 или 6?

метод find_first_of ищет в строке и возвращает позицию первого символа, совпадающего с любым символом из заданной группы.
Соответственно в строке "Hello hello" find_first_of("hH") вернёт 0.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Май 20, 2013, 11:05 »

Ну ладно, нашли "h(H)", а нужно-то было "hello"
Записан
thechicho
Гость
« Ответ #14 : Май 20, 2013, 11:10 »

ясно, спс.
но, имхо, для функций, которые возвращают не только 0 или 1
такая запись некорректна
if (!word.find_first_of("hH")) { // wtf? }

я бы так писал
if (word.find_first_of("hH") == 0) { // строка начинается с символа из группы }
if (word.find_first_of("hH") != -1) { // строка содержит символ из группы }
Записан
Страниц: [1] 2 3 ... 11   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.193 секунд. Запросов: 23.