С++
for (int i = 0; i < sizeof cStr; i++) {
if (cStr == "s") {
if (bFlag) cStr = "f";
bFlag = !bFlag;
}
}
Не говоря уже о том, что не оптимальный. )
К тому же,ОС ТС не указал,посему написал под сами-знаете-что
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;
}
Не говоря уже о том, что не оптимальный. )
1. @pixo $oft написал полностью корректный код с точки зрения инициализации локального массива строкой. Никто никуда не упадет.
2. Задача сложности O(n) так, что оптимальнее некуда.
Если строковый литерал будет размещен в сегменте только для чтения (например `.rdata`), то ещё как упадёт (при попытке записи cStr = "f"). Выдаст Segmentation fault.
Gcc под линухом делает так по-умолчанию. Даже warning выдаёт о том, что мол вместо положенного `const char *` использован `char *`:
deprecated conversion from string constant to 'char*'
Должен добавить, что при использовании синтаксиса массива всё ок, т.к. gcc уже в .data отправит строку.
Gcc под линухом делает так по-умолчанию. Даже warning выдаёт о том, что мол вместо положенного `const char *` использован `char *`:
Ощутите различие
[code=c++]
char cStr[] = "deadface";
const char* cStr = "deadface";
[/code]
[code=c++]
char cStr[] = "deadface";
const char* cStr = "deadface";
[/code]
Вы меня опередили. Хотел отредактировать своё сообщение. Действительно, не обратил внимания.
Хотя, в действительности, это немного странно.
aks,а что не так?Спи больше,дружище! ☺
Собственно,выше я указал,что под GCC и проч. не писа́л,поэтому привык,что в секцию только для чтения литерал попадает только при явном указании
aks,а что не так?Спи больше,дружище! ☺
Собственно,выше я указал,что под GCC и проч. не писа́л,поэтому привык,что в секцию только для чтения литерал попадает только при явном указании
Во-во. Я-то сам не сторонник такой оптимизации, которая и не оптимизирует ничего и портабельность ухудшает.
Польза от этой оптимизации имеется только при написании динамических разделяемых библиотек - сегменты только для чтения можно безболезненно расшаривать между потоками/процессами.
Про оптимальность я наверное имел ввиду организацию цикла и индексирование массива внутри. Это действительно можно немного попроще проще сделать. Хотя - фиг знает что я имел ввиду. :D