Алгоритм поиска подстроки в строке Go
Помогите, пожалуйста, с заданием Написать программу для нахождения подстроки в кириллической подстроке. Программа должна запускаться с помощью команды:
go run main.go --str "строка для поиска" --substr "поиска"
Для реализации такой работы с флагами воспользуйтесь пакетом flags, а для поиска подстроки в строке вам понадобятся руны.
Ответы (2 шт):
Насчёт рун ничего сказать не могу, а стандартными средствами ваше задание решается так: package main
import (
"flag"
"fmt"
"os"
"strings"
)
var strFlag = flag.String("str", "", "Строка, в которой нужно искать.")
var substrFlag = flag.String("substr", "", "Строка, которую нужно найти.")
func main() {
flag.Parse()
str := *strFlag
substr := *substrFlag
if str == "" {
println("Строка не задана")
os.Exit(1)
}
if substr == "" {
println("Строка для поиска не задана")
os.Exit(1)
}
idx := strings.Index(str, substr)
if idx < 0 {
fmt.Println("Строка не найдена")
return
}
fmt.Println("Подстрока начинается с позиции ", idx)
}
go run main.go --str "строка для поиска" --substr "поиска" печатает
Подстрока начинается с позиции 20
go run main.go --str "строка для поиска" --substr "неа" печатает
Строка не найдена
Я уже разобрался. У меня проблема была с алгоритмом и рунами, а не с самим пакетом flag).
package main
import (
"flag"
"fmt"
)
func main() {
var str string
flag.StringVar(&str, "str", "", "big string")
var subStr string
flag.StringVar(&subStr, "subStr", "", "sub string")
flag.Parse()
if findSubstring(str, subStr) == true {
fmt.Println("Подстрока subStr есть в строке str")
} else {
fmt.Println("Подстрока subStr отсутствует в строке str")
}
}
func findSubstring(str string, subStr string) bool {
r := []rune(str)
sr := []rune(subStr)
if len(sr) == 0 {
return false
}
str:
for i, ru := range r {
if ru == sr[0] {
for j, x := range sr[1:] {
if r[i+j+1] != x {
continue str
}
}
return true
}
}
return false
}