Показать сообщение отдельно
Старый 15.08.2011, 12:33   #19
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от nexen Посмотреть сообщение
Дочитал книжку, однако там так и не были описаны операторы для работы с символьными строками и символьными массивами. Нашел в интернете, что следующая функция-член работает и с С-строками и классой С++ строк : str.erase(i,k) - где i - № символа, с которого удалется k-символов. Так ли это?

Так же я не нашел оператора, функции-члена или библиотеки для поиска нужных символов в строке. Допустим, дана строка :
str="lol what.wtf.12"
Мне из неё нужно получить число 12. Конечно, можно проверять каждый символ isdigit'том, но если мне известно, что в строке есть число, которое хранится в переменной X, не проще ли будет найти первое вхождение строки X в строку STR?.. В Turbo Pascal'е есть такая хорошая команда : pos(str,x). Однако гугл трубит в рог с заявлением, что такой команды нет Так есть или нет? А если нет, то мне придется перебирать все символы до тех пор, пока не наткнусь на тот же, с которого начинается строка X, затем пройтись с помощью x.length() по строке STR, копировать все символы оттуда по длине X и записать их в STR2, а затем сравнить эти две строки? D:
p.s Или может у вас есть ссылка, где описаны операторы и функции-члены для работы с классой С++ строк и С-строк?
практически все функции для работы со строками в CRT начинаются с str.

собственно функция для поиска подстроки внутри строки называется strstr()

Раздел MSDN описывающий работу со строками
http://msdn.microsoft.com/ru-ru/library/f0151s4x.aspx

или тут
http://www.cplusplus.com/reference/c...string/strstr/

Так же можно использовать класс std::string из STL

Ну и в любом фреймворке есть свои реализации класса строки, например CString в ATL\MFC.

Цитата:
Сообщение от nexen Посмотреть сообщение
p.p.s Можно ли задать динамический массив, а затем его использовать таким образом :
int x;
int*massiv=new int[x];
x=2;
// а затем, если мне понадобится более 2ух элементов сделать следующее
x++; // станет ли массив из трех элементов, если я переназначу переменную по ходу дела и что будет с массивом из трех элементов с УЖЕ ПРИСОВЕННЫМИ ЗНАЧЕНИЯМИ если сделать следующее
x--;
p.p.p.s И да, если я вдруг задал ну о-о-о-очень тупой вопрос, пожалуйста, не высылайте за мной 03
Нет конечно.
В твоем примере переменная x и massiv никак не связаны, и изменение x ни коим образом не влияет на massiv.
Более того это ошибка - использование переменной без инициализации.
если нужен массив из двух int то пишем
Код:
int *array = new int[2];
если руками надо сделать увеличение массива до 3 элементов, то пишем следующее:
Код:
int *tmp = new int[3]; // выделяем память под новый массив из 3 элементов
memcpy(tmp, array, 2*sizeof(int)); // копируем туда данные из нашего массива
delete[] array; // освобождаем память занимаемую массивом
array = tmp;
Теперь у нас переменная array - массив из трех элементов и первые два остались на месте из старого массива

Правда если array содержит данные не простого типа, а некоего класса, то memcpy конечно же использовать нельзя. Прийдется в цикле сделать присваивание поэлементное:
Код:
for (int i = 0; i < 2; i++)
tmp[i] = array[i];

В чистом с++ нет понятия динамический массив, для этого используй класс из STL std::vector

Последний раз редактировалось Йоха; 15.08.2011 в 12:50.
Йоха вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
nexen (15.08.2011)