Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

С++

75K
01 декабря 2011 года
*mk*
3 / / 01.12.2011
Подскажите,пожалуйста,как в строке символов заменить каждый второй символ s на f
7
01 декабря 2011 года
@pixo $oft
3.4K / / 20.09.2006
 
Код:
char cStr[] = "asidaldhlashflasfhlsa", bFlag = 0;
for (int i = 0; i < sizeof cStr; i++) {
    if (cStr == "s") {
        if (bFlag) cStr = "f";
        bFlag = !bFlag;
    }
}
Писал прямо из браузера,так что код потребует допилки
240
02 декабря 2011 года
aks
2.5K / / 14.07.2006
Мало того, код вобще не корректный с точки зрения инициализации строки и на многих версиях компиляторов просто упадет в сегфолт сразу.
Не говоря уже о том, что не оптимальный. )
7
02 декабря 2011 года
@pixo $oft
3.4K / / 20.09.2006
Так приведи свой же,оптимальный и всё такое.С радостью вычитаю:)
К тому же,ОС ТС не указал,посему написал под сами-знаете-что
278
02 декабря 2011 года
Alexander92
1.1K / / 04.08.2008
Ну во-первых, был заявлен C++. :) Например, так:
 
Код:
string str = "sdfar;gslkssgkjsnk4jasnlksgnjr";
size_t pos = -1, new_pos = 0;
while ((new_pos = str.find('s', pos+1)) != string::npos) {
   if ((pos = str.find('s', new_pos+1)) != string::npos)
      str[pos] = 'f';
   else
      break;
}
260
02 декабря 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: aks
Мало того, код вобще не корректный с точки зрения инициализации строки и на многих версиях компиляторов просто упадет в сегфолт сразу.
Не говоря уже о том, что не оптимальный. )



1. @pixo $oft написал полностью корректный код с точки зрения инициализации локального массива строкой. Никто никуда не упадет.
2. Задача сложности O(n) так, что оптимальнее некуда.

16K
02 декабря 2011 года
asmforce
186 / / 05.01.2010
Цитата: Ramon
1. @pixo $oft написал полностью корректный код с точки зрения инициализации локального массива строкой. Никто никуда не упадет.



Если строковый литерал будет размещен в сегменте только для чтения (например `.rdata`), то ещё как упадёт (при попытке записи cStr = "f"). Выдаст Segmentation fault.
Gcc под линухом делает так по-умолчанию. Даже warning выдаёт о том, что мол вместо положенного `const char *` использован `char *`:

Цитата:

deprecated conversion from string constant to 'char*'



Должен добавить, что при использовании синтаксиса массива всё ок, т.к. gcc уже в .data отправит строку.

240
02 декабря 2011 года
aks
2.5K / / 14.07.2006
Ахаха, читаю проспавшись че я накуралиесил за сутки на форуме в неадеквате. Забанят небось.
260
02 декабря 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: asmforce
Если строковый литерал будет размещен в сегменте только для чтения (например `.rdata`), то ещё как упадёт (при попытке записи cStr = "f"). Выдаст Segmentation fault.
Gcc под линухом делает так по-умолчанию. Даже warning выдаёт о том, что мол вместо положенного `const char *` использован `char *`:



Ощутите различие
[code=c++]
char cStr[] = "deadface";
const char* cStr = "deadface";
[/code]

16K
02 декабря 2011 года
asmforce
186 / / 05.01.2010
Цитата: Ramon
Ощутите различие
[code=c++]
char cStr[] = "deadface";
const char* cStr = "deadface";
[/code]



Вы меня опередили. Хотел отредактировать своё сообщение. Действительно, не обратил внимания.
Хотя, в действительности, это немного странно.

7
02 декабря 2011 года
@pixo $oft
3.4K / / 20.09.2006
Ramon,спасибо:)
aks,а что не так?Спи больше,дружище! ☺

Собственно,выше я указал,что под GCC и проч. не писа́л,поэтому привык,что в секцию только для чтения литерал попадает только при явном указании
16K
02 декабря 2011 года
asmforce
186 / / 05.01.2010
Цитата: @pixo $oft
Ramon,спасибо:)
aks,а что не так?Спи больше,дружище! ☺

Собственно,выше я указал,что под GCC и проч. не писа́л,поэтому привык,что в секцию только для чтения литерал попадает только при явном указании



Во-во. Я-то сам не сторонник такой оптимизации, которая и не оптимизирует ничего и портабельность ухудшает.
Польза от этой оптимизации имеется только при написании динамических разделяемых библиотек - сегменты только для чтения можно безболезненно расшаривать между потоками/процессами.

240
03 декабря 2011 года
aks
2.5K / / 14.07.2006
Да там не в высыпании дело. =)
Про оптимальность я наверное имел ввиду организацию цикла и индексирование массива внутри. Это действительно можно немного попроще проще сделать. Хотя - фиг знает что я имел ввиду. :D
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог