Programování v C++

Cíle cvičení

  • House of horrors
  • Demonstrace: Řetězce
  • Cvičení: Otočení řetězce
  • Demonstrace: Práce se znaky
  • Cvičení: Úprava řetězce
  • Demonstrace: Streamy a řetězce
  • Cvičení: Součet

House of horrors

House of horrors [1]


long sum_vector(const std::vector<std::string> vector) { ... }
    

House of horrors [2]


for (size_t index =1;index<arg.size();++index)
{
if (arg[index] == "--range")
{
  ...
    

House of horrors [3]


void cout_hello_world()
{
    std::cout << "Hello world\n";
}

std::string hello_world()
{
    return "Hello world";
}
    

House of horrors [4]


size_t index = arg.size();
index = 0;

while (index < arg.size()) {
  auto item = arg[index];
  ...
    

House of horrors [5]


#define vec_s std::vector<std::string>
#define vec_i std::vector<int>
    

House of horrors [6]


for (auto& x : vec) {
    ans += stoi(x);
}
...
for (int i = 1; i <= count; ++i) {
  int from = stoi(vec[i * 2 + 0]);
  ...
    

House of horrors [7]


const std::string range_command = "--range";
    

House of horrors [8]


std::span<char*> buildSpan(char* args[]) {
    

House of horrors [9]


int sum_range(int from, int to) {
  int sum = 0;
	for (size_t i = from; i <= to; i++)
	{
		sum += i;
	}
	return sum;
}
    

...

The problem is similar to LeetCode 46. Permutations. There are posts with solutions.

Find your code style and stick with it!
Google C++ Style Guide, https://google.github.io/styleguide/cppguide.html (Style), Texas State University.
Those are not endorsements!

Demonstrace: Řetězce

  • Reprezentace řetězce v paměti
  • std::string
  • std::string_view

Konverze do řetězce: std::to_string , std::format , ( custom types for std::format ), ...

Cvičení: Otočení řetězce

Umístění: ./labs/02-string-revert/

Čas:

Implementujte funkce revert a revertInPlace. Aby je bylo možné zavolat následovně.


std::string original = "123456789";
auto reverted = revert(original);
auto reverted_twice = revert(reverted);

revertInPlace(original);

std::cout << "Reverted original (987654321): " << original << std::endl
  << "Reverted (987654321): " << reverted << std::endl
  << "Reverted twice (123456789): " << reverted_twice << std::endl;
    

Uvedený fragment kódu vložte do funkce main.

Mohlo by se hodit ...

std::string.push_back

Demonstrace: Práce se znaky

#include <ctype.h> vs #include <locale>

Detekce druhu znaku: std::isalpha , std::isalnum , std::isdigit , ...

Změna znaku: toupper vs std::toupper

Cvičení: Úprava řetězce

Umístění: ./labs/02-string-update/

Čas:

Napište funkci, která dostane řetězec. Funkce změní každé písmeno na upper case. Každé číslo zvedne o jedna. Řetězec stačí číst po znaku, číslo je tedy vždy jeden znak.

Příklad: m3ssage92 => M4SSAGE103


std::string original = "m3ssage92";
std::string modified = magic(original);

std::cout << "Expected value 'M3SSAGE103'" << std::endl;
std::cout << "Actual value   '" << modified << "'" << std::endl;
    

Uvedený fragment kódu vložte do funkce main.

Demonstrace: Streamy a řetězce

std::cout , std::cin , operator>> , operator<<

Cvičení: Součet

Umístění: ./labs/02-sum/

Čas:

Program čte dva argumenty z příkazové řádky. První argument je jméno vstupního souboru. Druhý argument je jméno výstupního souboru. Pokud je první argument '-' program čte ze standardního vstupu. Pokud je druhý argument '-' program zapisuje do standardního výstupu.

Program zpracovává vstup po řádkách. Na každém řádku program sečte hodnotu čísel a vyhodnotí výrazy '+' a '-'. Ostatní znaky program ignoruje. Výslednou hodnotu pak program zapíše na řádek výstupu. Výraz je oddělení z obou stran mezerou a sám mezeru neobsahuje. Vyhodnocení výraze je v pořadí čtení, neplatí tedy klasické přednosti operátorů Pokud je vstupní řádek, nebo neobsahuje číslo, vypíše program 0.

Příklady vstupů a výstupů

Vstup:

      1 2
      a1

      0 2 8a v5
      1+1
      2+2+2
      a1+b2
      2+2-1+3
    

Výstup:

      3
      1
      0
      15
      2
      6
      3
      6
    

Mohlo by se hodit ...

std::istream::peek , std::basic_istream<CharT,Traits>::ignore

Shrnutí

  • Demonstrace: Řetězce
  • Cvičení: Otočení řetězce
  • Demonstrace: Práce se znaky
  • Cvičení: Úprava řetězce
  • Demonstrace: Streamy a řetězce
  • Cvičení: Součet

Leave an anonymous feedback.