Перейти к публикации
  • Сейчас на странице   Всего пользователей: 4   (0 пользователей, 4 гостя)

Hed-kun

Программирование, т. 6

Рекомендованные сообщения

http://stackoverflow.com/questions/236129/split-a-string-in-c

 

вот там второй ответ по идее самый норм.

Первый как я понял годится только для пробелов


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

Зачем люди учат С, если есть красивый С++? даже самые убитые ембедед поддерживают некоторый сабсет с++....

 

http://stackoverflow...t-a-string-in-c

 

вот там второй ответ по идее самый норм.

Первый как я понял годится только для пробелов

Да, я всегда 2й юзаю

Поделиться сообщением


Ссылка на сообщение

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

мне интересно почему функция не работает когда передаёшь константу?

Поделиться сообщением


Ссылка на сообщение
(изменено)

Хера там задр на итераторах пишет, я так понимаю копи(строка,индекс1,индекс2) для школьников?лан ща с итераторами поглубже разберусь, спасибо

А не, я даун походу. Я так понимаю версия для меня это где парень гетлайном зачем то читает? Я с телефона просто, и хуево ориентируюсь

 


Изменено пользователем Matgen

Тень огня четвертого поколения

Поделиться сообщением


Ссылка на сообщение

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

Зачем люди учат С, если есть красивый С++? даже самые убитые ембедед поддерживают некоторый сабсет с++....

Мне просто посоветовали прочитать эту книгу перед нормальным изучением c++

Поделиться сообщением


Ссылка на сообщение

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

мне интересно почему функция не работает когда передаёшь константу?

там варнинг вылетает, что запрещена неявная конвертация из строкового литерала в char*. И правильно, что запрещена, еще захочешь поменять и наступит где-нибудь пиздец.


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

Зачем люди учат С, если есть красивый С++? даже самые убитые ембедед поддерживают некоторый сабсет с++....

Мне просто посоветовали прочитать эту книгу перед нормальным изучением c++

посоветую не читать эту книгу.

посоветую если и читать, то последнюю страуструпа и майерса дальше. потом тематические.

Поделиться сообщением


Ссылка на сообщение

Подскажите книги\уроки по html+php. Офк в инете куча материала, но хотелось бы услышать может кому какие понравились и т.д.

Поделиться сообщением


Ссылка на сообщение
(изменено)

 

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

Зачем люди учат С, если есть красивый С++? даже самые убитые ембедед поддерживают некоторый сабсет с++....

Мне просто посоветовали прочитать эту книгу перед нормальным изучением c++

посоветую не читать эту книгу.

посоветую если и читать, то последнюю страуструпа и майерса дальше. потом тематические.

 

Почему не читать, она устревшая или что? Просто на многих форумах приводится в пример как одна из лучших, ну и хотелось бы книга которая закрыла бы пробелы в теории.


Изменено пользователем P0JIT0H

Поделиться сообщением


Ссылка на сообщение

 

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

Зачем люди учат С, если есть красивый С++? даже самые убитые ембедед поддерживают некоторый сабсет с++....

Мне просто посоветовали прочитать эту книгу перед нормальным изучением c++

посоветую не читать эту книгу.

посоветую если и читать, то последнюю страуструпа и майерса дальше. потом тематические.

 

Почему не читать, она устревшая или что? Просто на многих форумах приводится в пример как одна из лучших, ну и хотелось бы книга которая закрыла бы пробелы в теории.

1. Нормальные программисты не сидят на русских форумах.

2. Программисты редко сидят на форумах, на которых заведено советовать книжки

Поделиться сообщением


Ссылка на сообщение

 

http://cpp.sh/3ej74

 

 

и бтв я же правильно понимаю что при s[j]='\0' память же всё равно останется выделена под ненужные символы, из оригинальной строки идущие после j

 

так а зачем ты заново константу передаешь в метод, после того, как уже инициализировал ей же массив?

http://cpp.sh/8cdc

тот сайт вообще борзый и даже код с просто варнингами не дает исполнять.

 

 

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

Зачем люди учат С, если есть красивый С++? даже самые убитые ембедед поддерживают некоторый сабсет с++....

Мне просто посоветовали прочитать эту книгу перед нормальным изучением c++

посоветую не читать эту книгу.

посоветую если и читать, то последнюю страуструпа и майерса дальше. потом тематические.

 

Почему не читать, она устревшая или что? Просто на многих форумах приводится в пример как одна из лучших, ну и хотелось бы книга которая закрыла бы пробелы в теории.

1. Нормальные программисты не сидят на русских форумах.

2. Программисты редко сидят на форумах, на которых заведено советовать книжки

Я далеко ещё не норм программист, поэтому и прошу посоветовать тру книгу.

Поделиться сообщением


Ссылка на сообщение

Я далеко ещё не норм программист, поэтому и прошу посоветовать тру книгу.

Рихтера winapi почитай

Поделиться сообщением


Ссылка на сообщение

C++ Programming language 4th edition

На русский вроде еще не перевели. Вообще охуенная книга, сначала дается в общих чертах, потом дохуя конкретики. Если совсем дцп то у Страуструпа еще что- то есть там полайтовее, но я открыл и там много в принципе о программировании (для совсем не але парней) но я так понял с++ это вообще пизда поэтому многое гуглить надо и офк уметь отличать дцп С от плюсов, а то пиздец сколько задач пишут именно на си


Тень огня четвертого поколения

Поделиться сообщением


Ссылка на сообщение

C++ Programming language 4th edition

На русский вроде еще не перевели. Вообще охуенная книга, сначала дается в общих чертах, потом дохуя конкретики. Если совсем дцп то у Страуструпа еще что- то есть там полайтовее, но я открыл и там много в принципе о программировании (для совсем не але парней) но я так понял с++ это вообще пизда поэтому многое гуглить надо и офк уметь отличать дцп С от плюсов, а то пиздец сколько задач пишут именно на си

Я ему и написал страуструпа последнего. это и есть эта книга

Поделиться сообщением


Ссылка на сообщение

Ну я так понял она по стл найс тоже. Я прежде чем про сплит спросить туда слазил нашел там сплит по пробелу, а по символам не было. Я так понял если в книге нету, то самому писать


Тень огня четвертого поколения

Поделиться сообщением


Ссылка на сообщение
(изменено)

почему эта функция - взята из книги Кернигана Ритчи - отказывается работать

http://cpp.sh/4r67 niet

почему то же самое но с squeeze("qweerty", 'q'); Отказывается работать, я понимаю что в ориганале это массив char, а я передаю строку, но в чём конкретно ошибка?

В том что ты передаешь не массив str, а строковую константу. Они хранятся в какой-то отдельной памяти, я уж не помню но не суть. Ее нельзя передавать в функцию, т.к. это константа, а функция ее собирается изменять. Ты мог бы написать

void squeeze(const char s[], char c){ ...

Тогда бы все заработало, но опять же компилятор тебе не даст этого сделать, так как в функции написано s[j++]=... Т.е. ты собираешься наебать компилятор, обьявив строку s константой, а потом втихую ее изменить. По поводу Кернигана, я ее прочитал, но она рли сложная для тех кто ни разу не сталкивался с С, просто невозможно за 200 страниц рассказать о том как устроен этот язык. Хотя примеры там интересные, но потом пойдет пиздец, всякие синтаксические анализаторы по методу рекурсивного спуска. Кароч я после нее еще одну книжку по С прочитал на 800 страниц, вот тогда я уже более менее норм начал шарить. А вообще если тебе нужен С++ то рли наверно стоит с него и начать. Мне прост он не нужен.

 

да, правильно понимаешь, память никто не чистит. Просто функции вывода смотрят на \0 и дальше ничего не выводят.

Если хочешь и обрезать лишнее в памяти, можешь сделать что-то типа

 

char* newStr = strdup(str);

free(str);

Он должен сделать копию старой строку только по \0 и следовательно не копировать всё лишнее

 

Но тебе это не надо как минимум потому, что ты вообще не выделяешь память на куче. Освобождать то и нечего.

free работает только с той памятью, которая была выделена malloc'ом, т.е. с динамической. strdup вроде где то внутри использует malloc, поэтому free(newStr) сработает, а free(str) естественно нет, так как это статическая память.


Изменено пользователем .felix

Поделиться сообщением


Ссылка на сообщение

ну так я и написал, что ему нечего удалять то :smile:


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)

подскажите регулярное выражение для неразрывной (ничем, тоесть цифры подряд идут без каких либо других знаков) последовательности цифр в строке. последовательность максимальной длинны, в смысле например "12345" - здесь есть последовательность "1", "12", "123" и тд. а нужна именно максимальная "12345"

типа есть строка "as asdfusdsplfosd asopd aspo d8712348971987489174897 ijuf 98 33333"

надо рег выр которое найдет (будет соответствовать) этим и только этим подстркам "8712348971987489174897" "98" "33333"

вообще в джаве (хотя вроде рег выр одинаковые везде). если что там цифра обозначается \d, а НЕ цифра \D

что-то типа (\D любое количество (от 0 до бесконечности)) (\d любое количество(от 1 до бесконечности)) (\D любое количество (от0 до беск))


Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

[^\d]*(\d+)[^\d]*

?

 

а, если действует \D, то

\D*\d+\D*

 

дочитал наконец твой пост до конца

 

ты же сам и составил регулярку, в чем вопрос?


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

 

	String str = "as asdfusdsplfosd asopd aspo d8712348971987489174897 ijuf 98 33333";
	ArrayList<String> arrayList = new ArrayList<String>();

	Matcher match = Pattern.compile("[0-9]+").matcher(str);
	while (match.find())
		arrayList.add(match.group());

 

или проще

 

String[] strings = "as asdfusdsplfosd asopd aspo d8712348971987489174897 ijuf 98 33333".split("[^0-9]+");

 

Но по факту ты же сам спросил - сам ответил.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...