Использование строк
Копирование строки
Преобразование строк или поиск строк часто используются при разработке приложений. В этом примере мы поговорим о том, как находить положение строки и преобразовывать строки в числа, используя базовые APIs, написанные на C.
Создайте новый проект 'StringSample'. Откройте файл исходного кода и внесите следующие изменения в функцию create_base_gui().
/* Label*/ ad->label = elm_label_add(ad->conform); elm_object_text_set(ad->label, "Hello EFL"); evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_content_set(ad->conform, ad->label); elm_label_line_wrap_set(ad->label, EINA_TRUE); /* Show window after base gui is set up */ evas_object_show(ad->win); show_string_result(ad->label);
elm_label_line_wrap_set() - это API, который определяет автоматическую упаковку строки в метку.
show_string_result() - это функция, которая отображает результат преобразования строк. Добавьте новую функцию выше create_base_gui().
static void show_string_result(Evas_Object *label) { char buf[PATH_MAX], str1[100]; char *str2; strcpy(str1, "12345"); sprintf(buf, "[%s]", str1); elm_object_text_set(label, buf); }
strcpy() - это API, который копирует строку. Первый параметр показывает адрес памяти, где будет храниться строка, в то время как второй параметр показывает данные об оригинальной строке. В нашем случае мы ввели текст '12345' в строковую переменную 'str1.'
sprintf() - это API, который создает новую строку заданного типа.
Теперь, давайте запустим пример. Мы видим, что текст заключен в квадратные скобки.
Запрос длины строки
В этом примере мы запросим длину строки, сохраненной в переменной str1. Добавьте код в конце функции show_string_result().
strcpy(str1, "12345"); sprintf(buf, "[%s]", str1); int length = strlen(str1); sprintf(buf, "%s<br>Length : %d", buf, length); elm_object_text_set(label, buf);
strlen() - это API, который запрашивает и затем возвращает длину строки. Str1 — это символьный массив, так, что он имеет фиксированную длину. В таких случаях будет возвращаться длина строки от начала строки до символа конца строки (\0).
Запустите пример.
Извлечение заданной длины символов от начала строки
В этом разделе мы выделим первые три символа из переменной str1. Добавьте код в конец функции show_string_result().
sprintf(buf, "%s<br>Length : %d", buf, length); str2 = eina_stringshare_add_length(str1, 3); sprintf(buf, "%s<br>Front 3 : %s", buf, str2); elm_object_text_set(label, buf);
eina_stringshare_add_length() - это API, который извлекает заданную длину символов от начала строки. Первый параметр показывает данные об оригинальной строке, второй параметр — длину извлекаемой последовательности символов. Будет возвращаться извлеченная строка. Запустите пример. Символы '123' были выделены от начала строки '12345.'
Извлечение заданной части строки
В этом разделе мы поговорим о том, как выделять определенное количество символов из строки, указав начальную точку выделения. Добавьте код в конец функции show_string_result().
sprintf(buf, "%s<br>Front 3 : %s", buf, str2); str2 = eina_stringshare_add_length(str1 + 2, 3); sprintf(buf, "%s<br>substr 3 : %s", buf, str2); elm_object_text_set(label, buf);
Мы передали в качестве первого параметра функции eina_stringshare_add_length() function значение 'str1 + 2'. Сделав это, мы выделили символы '345.'
Запустите пример. Три символа будут выделены из строки '12345', начиная с третьей позиции.
Преобразование строки в числовое значение
Для преобразования строки в число вы можете использовать функцию atoi(). Добавьте код в конец функции show_string_result().
sprintf(buf, "%s<br>substr 3 : %s", buf, str2); int i = atoi(str1); sprintf(buf, "%s<br>string to int '%s' + 3 = %d", buf, str1, i + 3); elm_object_text_set(label, buf);
atoi() - это API, который преобразует строку в тип int.
Atol() - это API, который преобразует строку в тип long type.
Atof - это API, который преобразует строку в тип float.
Запустите пример. Убедитесь в том, что строка '12345' будет преобразована в число, а к результату будет прибавлено число 3, как показано на экране.