Dmitry Telenkov 3 gün önce
ebeveyn
işleme
97966d1bb2
3 değiştirilmiş dosya ile 235 ekleme ve 0 silme
  1. 83 0
      go/stepik/1/byte_slice.go
  2. 45 0
      go/stepik/1/string_task.go
  3. 107 0
      go/stepik/1/strings.go

+ 83 - 0
go/stepik/1/byte_slice.go

@@ -0,0 +1,83 @@
+package main
+
+import (
+	"fmt"
+	"unicode"
+	"unicode/utf8"
+)
+
+func main() {
+
+	// ExampleBytesSlice()
+	// ExampleRune()
+	ExampleUnicode()
+}
+
+func ExampleBytesSlice() {
+	// Используем строку, которую конвертируем в []byte,
+	// чтобы показать, как выглядит байтовый срез.
+	bs := []byte("Это байтовый срез")
+
+	// Печатаем байтовый срез.
+	fmt.Printf("Так байтовый срез выглядит внутри: %v\n", bs)
+
+	// Демонстрируем, что быйтовый срез можно изменять,
+	// а затем выводи его в виде строки.
+	for i := range bs {
+		// Для четных байтов увеличиваем на 1, для нечетных уменьшаем на 1
+		if bs[i]%2 == 0 {
+			bs[i] = bs[i] + 1
+		} else {
+			bs[i] = bs[i] - 1
+		}
+	}
+
+	// Печатаем измененный байтовый срез в виде строки.
+	fmt.Printf("Измененный байтовый сред в виде строки: %s", bs)
+}
+
+func ExampleRune() {
+	// Преобразуем строку в срез рун
+	rs := []rune("Это срез рун")
+
+	// Итерируемся по срезу рун и заменяем символ 'р' на '*'
+	for i := range rs {
+		// fmt.Println(rs[i])
+		if rs[i] == 'р' {
+			rs[i] = '*'
+		}
+	}
+
+	// Выводит измененный срез в виде строки
+	fmt.Printf("Измененный срез в виде строки: %s\n", string(rs))
+}
+
+func ExampleUnicode() {
+	// функции ниже принимают на вход тип rune
+
+	// проверка символа на цифру
+	fmt.Println(unicode.IsDigit('1')) // true
+	// проверка символа на букву
+	fmt.Println(unicode.IsLetter('a')) // true
+	// проверка символа на нижний регистр
+	fmt.Println(unicode.IsLower('A')) // false
+	// проверка символа на верхний регистр
+	fmt.Println(unicode.IsUpper('A')) // true
+	// проверка символа на пробел
+	// пробел это не только ' ', но и:
+	//  '\t', '\n', '\v', '\f', '\r' - подробнее читайте в документации
+	fmt.Println(unicode.IsSpace('\t')) // true
+
+	// С помощью функции Is можно проверять на кастомный RangeTable:
+	// например, проверка на латиницу:
+	fmt.Println(unicode.Is(unicode.Latin, 'ы')) // false
+
+	// функции преобразований
+	fmt.Println(string(unicode.ToLower('F'))) // f
+	fmt.Println(string(unicode.ToUpper('f'))) // F
+
+	var en = "english"
+	var ru = "русский"
+	fmt.Println(len(en), len(ru))
+	fmt.Println(utf8.RuneCountInString(en), utf8.RuneCountInString(ru))
+}

+ 45 - 0
go/stepik/1/string_task.go

@@ -0,0 +1,45 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"strings"
+	"unicode"
+	"unicode/utf8"
+)
+
+func main() {
+
+	// text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
+	// text = strings.Trim(text, "\n\r")
+	// rs := []rune(text)
+	// if (unicode.IsUpper(rs[0])) && (strings.HasSuffix(text, ".")) {
+
+	// 	fmt.Println("Right")
+	// } else {
+	// 	fmt.Println("Wrong")
+	// }
+
+	/*
+		text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
+		text = strings.TrimRight(text, "\n")
+		rs := []rune(text)
+		if unicode.IsUpper(rs[0]) && rs[len(rs)-1] == '.' {
+			fmt.Println("Right")
+		} else {
+			fmt.Println("Wrong")
+		}
+	*/
+
+	text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
+	text = strings.TrimRight(text, "\n")
+	firstChar, _ := utf8.DecodeRuneInString(text)
+	lastChar, _ := utf8.DecodeLastRuneInString(text)
+	if unicode.IsUpper(firstChar) && lastChar == '.' {
+		fmt.Println("Right")
+	} else {
+		fmt.Println("Wrong")
+	}
+
+}

+ 107 - 0
go/stepik/1/strings.go

@@ -0,0 +1,107 @@
+package main
+
+import (
+	"fmt"
+	"strings"
+)
+
+func main() {
+	// ExampleString()
+	// ExampleEqualString()
+	stringFunctions()
+}
+
+func ExampleString() {
+	// Создадим строковый литерал s, значение которого "Это строка".
+	// Строка состоит из 10 символов, но ее длина в байтах будет 19,
+	// так как кириллические символы занимают 2 байта, а пробел - 1 байт.
+	var s string = "Это строка"
+	fmt.Printf("Длина строки: %d байт\n", len(s))
+
+	// Получи подстоку строки
+	fmt.Printf("Напечатаем только второе слово в кавычках: \"%v\"\n", s[7:])
+
+	// Попробуем изменить строку (возникает ошибка компиляции, так как строки
+	// неизменяемы):
+	// s[3] = 12
+	// Ошибка компиляции: cannot assign to s[3], потому что строки -
+	// неизменяемые последовательности.
+
+	// "Изменим строку", создав новую строку
+	s = s + " Новая строка"
+	fmt.Printf("%v\n", s)
+
+	// Проитерируемся по строке
+	for _, b := range s {
+		fmt.Printf("%v", b)
+	}
+	fmt.Printf("\n")
+}
+
+func ExampleEqualString() {
+	// Сравнение строк на равенство
+	fmt.Printf("Сравнение на равенство строк \"строка1\" и \"строка2\": %v\n", "строка1" == "строка2")
+
+	// Сравнение строк на неравенство
+	fmt.Printf("Сравнение на неравенство строк \"строка1\" и \"строка2\": %v\n", "строка1" != "строка2")
+
+	// Сравнение строк по алфавиту
+	fmt.Printf("\"Строка1\" > \"Строка2\": %v\n", "Строка1" > "Строка2")
+
+	// Output:
+	// Сравнение на равенство строк "строка1" и "строка2": false
+	// Сравнение на неравенство строк "строка1" и "строка2": true
+	// "Строка1" > "Строка2": false
+}
+
+func stringFunctions() {
+	fmt.Println(
+		// Содержится ли подстрока в строке
+		strings.Contains("test", "es"),
+
+		// Количество подстрок в строке
+		strings.Count("test", "t"),
+
+		// Начинается ли строка с префикса
+		strings.HasPrefix("test", "te"),
+
+		// Заканчивается ли строка суффиксом
+		strings.HasSuffix("test", "te"),
+
+		// Возвращает начальный индекс подстроки в строке, а при отсутствии
+		// вхождения возращает -1
+		strings.Index("test", "e"),
+
+		// объединяет массив строк через символ
+		strings.Join([]string{"hello", "world"}, "-"),
+		// результат: "hello-world"
+
+		// Повторяет строку n раз подряд
+		strings.Repeat("a", 5),
+		// результат: "aaaaa"
+
+		// Функция Replace заменяет любое вхождение old в вашей строке на new
+		// Если значение n равно -1, то будут заменены все вхождения.
+		// Общий вид: func Replace(s, old, new string, n int) string
+		// Пример:
+		strings.Replace("blanotblanot", "not", "***", -1),
+		// результат: "bla***bla***"
+
+		// Разбивает строку согласно разделителю
+		strings.Split("a-b-c-d-e", "-"),
+		// результат: []string{"a","b","c","d","e"}
+
+		// Возвращает строку c нижним регистром
+		strings.ToLower("TEST"),
+		// результат: "test"
+
+		// Возвращает строку c верхним регистром
+		strings.ToUpper("test"),
+		// результат: "TEST"
+
+		// Возвращает строку с вырезанным набором
+		strings.Trim("tetstet", "te"),
+		// результат: s
+	)
+
+}