Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият.
Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание.
Използваме бисквитки и за измерване на маркетинговите ни усилия.
Здравейте, за да не започвам друга тема пиша тук. На мен също ми дава 83/100, но аз ползвам доста по-проста логика. Когато срещнеш интервал, следващия чар го направи главен. Добавих също за запетайка и точка. Уж не харесва Zero Test 1, а при мен на конзолата минава. Ето и скрийншот от входа и джъджа: https://imgur.com/a/EgcdUd0
Аз дълго дълбах на тая задача също. На judge му писна от моите грешни submition-и, които все гърмяха на тест 1. Та, хубаво си задал след кои символи да прави главна буква, НО какво става, ако символа е различен, или пък са два последователни? ;) Пробвай текста от условието на задачата "we will--rock you"
Освен това не може да изброиш всички символи от ASCII таблицата. То ще стане 300 реда код само, за да провери символите :D
Ta, накратко казано, моя жокер е - if(!isalpha(word[g]) && isalpha(word[g+1])) и ако това условие е изпълнено, направи го главна буква :)
Изобщо не помислих, какво ще се случи, ако има например две тирета :D Реално, като добавих тире в проверката даде 100/100, но това е да излъжа джъджа, а иначе решението не струва изобщо и сега ще седна да го поправя! Много ти благодаря за подсказката, не знаех, че има функция като isalpha, супер полезна е за задачата
Недей да си мислиш, че ако не ползваш хипер-мега-ултра яката функция кода ти не става за нищо. Един код е готин преди всичко когато е форматиран така, че да бъде достатъчно четим независимо дали е пълен с мега яките функции или е с по-проста логика. Да, функциите ти спестяват много писане, излишни проверки, променливи и куп други тем подобни. Но ако кодът ти е правилен, работи и е форматиран така, че всеки след теб който го ползва да го разбере, значи няма такова нещо като "не струва". Може би да е знак за програмист с по-малко опит, но не и за такъв който не знае какво прави и пише купища garbage :)
100/100
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
for (int i = 1; i<sentence.length() ; ++i){
if ((!isalpha(sentence[i]))){ sentence[i+1] = toupper(sentence[i+1]);}
}
sentence[0]=toupper(sentence[0]);
cout << sentence << endl;
}
Преди да разбера, че има isAlpha и isDigit използвах:
if ((sentence[i] < 65 || sentence[i]>90) && (sentence[i] < 97 || sentence[i]>122)){
sentence[i+1] = toupper(sentence[i+1]);
}
По същество е същото, просто проверява дали не е буква. И ако не е - прави главна следващата. toupper не обръща внимание на специалните знаци и не ги променя, както и главните букви. Та няма от какво да се притеснявам, че ще обърка тире и ще го направи главно :)
Главно тире :D Това ми хареса.
Иначе един съвет - направи си константа, която да държи size-a на sentence-a и я позлвай нея в цикъла.
Вместо for(int i = 0; i < sentence.size(); ++i) го направи така:
const int sentenceSize = sentence.size();
for(int i = 0; i < sentenceSize; ++i)
Просто е по-бързо иначе при всяко завъртане на цикъла ще правиш проверка на size-a, което е безмислено и бави изпълнението му.
@dmartinov
Това не е много добър съвет защото:
- Повече код -> повече възможности за грешки както при писането, така и при четенето
- Микрооптимизация -> прави се само когато скороста на приложението е неприемлива и е доказано, че този код наистина бави
- Компилаторът може и ще направи подобни оптимизации навсякъде, където това е безопасно
И съм съгласен и не :)
Първо - трябва да се учим да мислим и в тази насока. Далеч по-удобно е да го направим на този етап отколкото когато утвърдим стила си на писане и после да де налага да се учим на нови навици.
Второ - декларирането на една константна не е кой знае какво писане. Не бива да ни е страх да пишем по-практичен код, просто защото можем да сбъркаме :)
Трето - не бива да разчитаме само на компилатора. Той е там да ни помогне, но не и да пише вместо нас. Хубаво е да знаем кое в кода ни как работи и как би могло да се модифицира
Колегата MartinBG е прав - спокойно може да използваш for(int i=0; i<sentence.size(); ++i) Компилатора ще го оптимизира и кода няма да е по-бавен. От друга страна, ако създадеш още една променлива (константа) тя продължава да съществува до края на скоупа в който е дефинирана (това може да бъде цялата функция или дори цялата програма) а това е потенциален източник на грешки. Ако след това промениш размера на контейнера и трябва да го обходиш отново, ще ти трябва още една променлива :)