Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

A, abcdefg, abscissa, b, bbb, bbbbb, bulvar, bulvara, grajdanstvo, zub, zubnoy.

При сложении двух строк, в конец первой строки будет записана вторая строка.

5) Для присваивания значения string-у используются кавычки («»):

  char a[5] = {'0', '1', '2', '3', '4'}; for (int i = 0; i < 5; ++i) cout << a[i]; cout << "\n"; // присваивание и вывод массива символов   string s = "01234"; cout << s << "\n"; // присваивание и вывод string-a

С различиями вроде все. Но главная особенность string -а в том, что в STL (Standard Template Library, или стандартная библиотека шаблонов) для него припасено много полезных функций:

1) string.size()

Возвращает размер string -a, а именно количество символов в нем. Стоит упомянуть, что символы в string -е пронумерованы начиная с нуля.

  string user_name; cin >> user_name; cout << user_name.size() << "\n" << s << "\n";

2) string.empty()

Возвращает true, если string пуст.

  string str; cin >> str; if (str.empty() == true) cout << "Error! Empty filename! \n"; else cout << "Success! \n";

3) string.clear()

Очищает строку, т.е. string.size() становится нулем, а string.empty() будет возвращать true.

  string s; cin >> s; cout << s; s.clear(); cin >> s;

4) string.push_back (char)

Добавляет в конец строки char -овский символ.

  char ch; string str; whlie (cin >> ch) str.push_back(ch); cout << str;

5) string.insert (int start1, string from, int start2, int amount)

Вставляет в строку начиная с позиции start1, amount символов, начиная со start2, из строки from. Т.е. написав:

  str.insert (6, name, 17, 3);

мы вставив в строку str, начиная с ячейки 6, символы из строки name с номерами 17, 18 и 19.

  string a = "to be", b = "or not", c = "that is", d = "the question!", s; s.insert (0, a, 0, a.size()); s.insert (s.size() - 1, b, 0, b.size()); s.insert (s.size() - 1, a, 0, 5); s.insert (s.size() - 1, c, 0, c.size()); s.insert (s.size() - 1, d, 0, d.size()); cout << s;

6) string.erase (int from, int amount)

Стирает из строки amount символов, начиная с ячейки from.

  string s = "a shot in the dark"; s.erase (2, 1); cout << s;

7) string.reverse (int from, int to)

Перевернет строку начиная с ячейки from до ячейки to (to не включительно).

  string a = "sator arepo tenet opera rotas"; a.reverse (0, a.size()); cout << a;

Итог:

Так получилось, что я сижу и нахваливаю string и всячески показываю его преимущества перед массивом char. Надо это исправить.

+ массива символов:

§ Работает заметно быстрее, чем string.

§ Потребляет меньше памяти.

§ Имеется способ считывания массива вместе с пробельными символами, с помощью функции gets():

  char str[100]; gets (str); cout << strlen(str) << " " << str << "\n"; // длина массива, сам массив

- массива символов:

§ Нету STL-овских функций.

+ строки:

§ Удобное считывание файлов.

§ Наличие множества полезных функций предназначенных для string.

- строки:

§ Медленная скорость работы и большое потребление памяти

§ Иногда, при изменении строки без специальных функций, целостность строки разрушается и ее нельзя вывести простым cout-ом.

У-ф-ф. Вроде на этом все. Спасибо за прочтение. Следующий урок будет о текстовом вводе выводе.

 

C++. Урок 11. Файловый ввод-вывод.

Опубликовано 13.12.2012 автором admin

Всем доброго дня!

До этого мы уже затрагивали тему ввода-вывода. И это было простой консолью. Теперь мы поговорим о файловом вводе-выводе.

Что из себя представляет эта тема понятно уже по названию, но все же…captain mod on:

Файловый ввод-вывод позволяет считывать данные из множества различных файлов, и выводить их в другие (или те же) файлы captain mod off.

Итак, для считывания файлов можно использовать функцию freopen, которая позволяет перенаправлять потоки ввода-вывода. Ввод всегда идет в поток stdin, вывод же в stdout. Теперь о том, как пользоваться freopen -ом:

  freopen ("имя файла", "мод", "имя потока");

Имя файла:

С этим все должно быть понятно, сюда мы пишем имя файла, в который будет направлен поток.

Мод:

Есть 6 модов:

1) Считывание, или «r», от слова read. Используется для потока ввода. Для считывания файл должен существовать.

2) Запись, или «w», от английского write. Используется для потока вывода. Если файла не существует, то он будет создан, иначе — перезаписан.

3) Добавление, или «a», от слова append. Используется для вывода, отличается от «w» тем, что продолжает записывать в файл, а не очищает его.

4,5,6) Те же моды, с разницей в том, что их можно использовать и для ввода, и для вывода. Вот сами моды «r+», «w+», «a+».

Поток:

1) Стандартный поток ввода — stdin;

2) Стандартный поток вывода — stdout;

3) Стандартный поток ошибок, этакий error_logstderr;

Программа считывающая из input.txt и записывающая в output.txt:

  # include <iostream> # include <cstdlib> # include <cstdio> // две новые библиотеки, нужны для работы freopen using namespace std; int d[1000000], n; /* переменные, инициализированные до функции main, считаются глобальными т.е. изначально равны нулю и могут быть вызваны в любой части программы. Рекомендую создавать массивы глобальными всегда. */ int sum (int l, int r) { int ans = 0; n = r - l + 1; for (int i = l, j = 1; i <= r; ++i, ++j) d[j] = i; for (int i = 1; i <= n; ++i) ans += d[i]; return ans; } int main() { freopen ("input.txt", "r", stdin); freopen ("output.txt", "w", stdout);   int a, b; cin >> a >> b; cout << sum (a, b) << "\n"; for (int i = 1; i <= n; ++i) cout << d[i] << " "; return 0; }

Так же для считывания можно использовать функции ifstream и ofstream, которые находятся в библиотеке fstream.

ifstream считывает с заданного файла.

ofstream выводит в заданный файл.

Теперь о том как их написать:

  ifstream название_функции_ввода ("название_файла_ввода"); ofstream название_функции_вывода ("название_файла_вывода");

Пример той же программы с использованием функций библиотеки fstream:

  # include <fstream> using namespace std; int d[1000000], n; int sum (int l, int r) { int ans = 0; n = r - l + 1; for (int i = l, j = 1; i <= r; ++i, ++j) d[j] = i; for (int i = 1; i <= n; ++i) ans += d[i]; return ans; } int main() { ifstream read_file ("input.txt"); ofstream write_file ("output.txt"); /* для считывания с файла input.txt мы будем использовать функцию read_file, можете заменить ее на что-нибудь другое */ int a, b; read_file >> a >> b; write_file << sum (a, b) << "\n"; for (int i = 1; i <= n; ++i) write_file << d[i] << " "; return 0; }

Стоит отметить, что ifstream использует мод «a», а ofstream мод «w». Можно открыть сколько угодно файлов, главное дать уникальное имя для функций ввода.

Для закрытия считывания или записи используйте функцию .close():

  имя_функции_ввода/вывода.close();

Ну, вроде все. Спасибо за прочтение!

Следующий урок будет После Конца Света о рекурсии. Всем удачи в наступающем Новом Году!

 

 

С++ урок 12-ссылки

Опубликовано 29.12.2013 автором admin

Добрый день!

Сегодня я хочу поговорить о ссылках в функциях.

Как вы знайте передача аргументов в функцию происходит по значению, то есть:

  #include <iostream>   using namespace std; //Обявления функции int func(int a,int b);   int main() { setlocale(LC_ALL,"RUSSIAN"); int a,b; cout << "Введите а и b через пробел" << endl; cin >> a >> b; cout << "Ответ = " << func(a,b) << endl; system("PAUSE"); return 0; }   //Определения функции int func(int a,int b) { return a + b; //Сложение }

Как мы видим числа передались в функцию по значению.

И функция вернула результат сложения через оператор return.

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

А так же мы не можем возвращать более 1 значения через оператор return.

Сейчас мы переделаем нашу программу:

  #include <iostream>   using namespace std; //Обявления функции inline void func(int& a,int& b);   int main() { setlocale(LC_ALL,"RUSSIAN"); int a,b; cout << "Введите а и b через пробел" << endl; cin >> a >> b; func(a,b); cout << "Ответ = " << "Сложение = " << a << "Умножение = " << b << endl; system("PAUSE"); return 0; }   //Определения функции inline void func(int& a,int& b) { int k; k = a; a = a + b; b = k * b; }

Символ & обозначает ссылку, то есть аргумент int& a ссылается на ту область памяти в которой находиться int a в функции main().
И при этом мы уменьшаем употребления памяти.
Всем спасибо за внимание, с вопросами обращайтесь в комментарии.




Дата добавления: 2015-09-10; просмотров: 21 | Поможем написать вашу работу | Нарушение авторских прав

Какую IDE(Среду разработки) выбрать? | Логическая переменная — bool | Спасибо, до скорого! | Побитовые операции, подробнее о них здесь. | Первый индекс - это длина таблицы, второй - высота. | Создание функции. | Z-функция строки. Число вхождений подстроки в строку. | Считывание переменных в цикле |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.011 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав