برو برنامه نویسی | مبانی رشته | رمزگذاری کاراکتر

Summarize this content to 400 words in Persian Lang
مقدمه
در درس قبلی، یاد گرفتیم که کاراکترها در Go با استفاده از UTF-8 کدگذاری می شوند و به عنوان یکی از آنها ذخیره می شوند. byte یا rune انواع حالا بیایید در مورد رشته که مجموعه ای از کاراکترها است صحبت کنیم. بیایید با هم در مورد آن بیاموزیم.
نکات دانش:
رشته چیست
ایجاد رشته
اعلام یک رشته
توابع رشته ای رایج
رشته چیست
در اولین برنامه ای که در Go یاد گرفتیم رشته را چاپ کردیم hello, world.
رشته یک نوع داده پایه در Go است که به عنوان یک رشته واقعی نیز شناخته می شود. می توان آن را به عنوان مجموعه ای از شخصیت ها درک کرد و یک بلوک مداوم از حافظه را اشغال می کند. این بلوک حافظه می تواند هر نوع داده ای مانند حروف، متن، ایموجی و غیره را ذخیره کند.
با این حال، بر خلاف زبان های دیگر، رشته ها در Go فقط خواندنی هستند و نمی توان آنها را تغییر داد.
ایجاد رشته
رشته ها را می توان به روش های مختلفی اعلام کرد. بیایید نگاهی به روش اول بیندازیم. یک فایل جدید به نام ایجاد کنید string.go:
touch ~/project/string.go
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
کد زیر را بنویسید:
package main
import “fmt”
func main() {
// Use the var keyword to create a string variable a
var a string = “labex”
a = “labex” // Assign “labex” to variable a
// Declare variable a and assign its value
var b string = “shiyanlou”
// Type declaration can be omitted
var c = “Monday”
// Use := for quick declaration and assignment
d := “Hangzhou”
fmt.Println(a, b, c, d)
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
کد بالا نحوه ایجاد رشته ها را با استفاده از نشان می دهد var کلمه کلیدی و := اپراتور اگر هنگام ایجاد متغیر با var، می توانید اعلان نوع را حذف کنید، همانطور که در ایجاد متغیر نشان داده شده است b.
خروجی مورد انتظار به شرح زیر است:
labex shiyanlou Monday Hangzhou
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اعلام یک رشته
در بیشتر موارد، از دو نقل قول استفاده می کنیم “” برای اعلام رشته ها مزیت دو نقل قول این است که می توان از آنها به عنوان دنباله فرار استفاده کرد. به عنوان مثال در برنامه زیر از عبارت استفاده می کنیم \n دنباله فرار برای ایجاد یک خط جدید:
package main
import “fmt”
func main(){
x := “shiyanlou\nlabex”
fmt.Println(x)
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی مورد انتظار به شرح زیر است:
shiyanlou
labex
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در اینجا چند توالی فرار رایج وجود دارد:
نماد
توضیحات
\n
خط جدید
\r
بازگشت کالسکه
\t
Tab
\b
بک اسپیس
\\
بک اسلش
\’
نقل قول واحد
\”
دو نقل قول
اگر میخواهید قالب اصلی متن را حفظ کنید یا نیاز به استفاده از چندین خط دارید، میتوانید از بکتیک برای نمایش آنها استفاده کنید:
package main
import “fmt”
func main() {
// Output Pascal’s Triangle
yangHuiTriangle := `
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1`
fmt.Println(yangHuiTriangle)
// Output the ASCII art of “labex”
ascii := `
# ## # # ### # ## ####
# # # ## # # # # # # # #
# # # # # # # # # # # # #
# ##### # # # # # # # ##### # #
# # # # ## # # # # # # #
##### # # # # ## # # # # ### `
fmt.Println(ascii)
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پس از اجرای برنامه، خروجی زیر را مشاهده خواهید کرد:
بکتیک معمولاً در درخواستها، قالبهای HTML و سایر مواردی که باید فرمت اصلی خروجی را حفظ کنید، استفاده میشود.
به دست آوردن طول یک رشته
در درس قبل یاد گرفتیم که کاراکترهای انگلیسی و علائم نگارشی عمومی یک بایت و حروف چینی سه تا چهار بایت را اشغال می کنند.
بنابراین در Go می توانیم از len() تابعی برای بدست آوردن طول بایت یک رشته. اگر هیچ کاراکتری وجود نداشته باشد که چندین بایت را اشغال کند، len() تابع را می توان برای اندازه گیری تقریباً طول رشته استفاده کرد.
اگر یک رشته دارای کاراکترهایی است که چندین بایت را اشغال می کنند، می توانید از آن استفاده کنید utf8.RuneCountInString تابع برای بدست آوردن تعداد واقعی کاراکترهای رشته.
بیایید یک مثال را ببینیم. کد زیر را در آن بنویسید string.go فایل:
package main
import (
“fmt”
“unicode/utf8”
)
func main() {
// Declare two empty strings using var and :=
var a string
b := “”
c := “labex”
// Output byte length
fmt.Printf(“The value of a is %s, the byte length of a is: %d\n”, a, len(a))
fmt.Printf(“The value of b is %s, the byte length of b is: %d\n”, b, len(b))
fmt.Printf(“The value of c is %s, the byte length of c is: %d\n”, c, len(c))
// Output string length
fmt.Printf(“The length of d is: %d\n”, utf8.RuneCountInString(d))
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی مورد انتظار به شرح زیر است:
The value of a is , the byte length of a is: 0
The value of b is , the byte length of b is: 0
The value of c is labex, the byte length of c is: 5
The length of d is: 9
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در برنامه ابتدا دو رشته خالی و رشته را اعلام کردیم labex. می بینید که طول بایت و طول واقعی آنها یکسان است.
تبدیل رشته ها و اعداد صحیح
ما می توانیم از توابع استفاده کنیم strconv بسته برای تبدیل بین رشته ها و اعداد صحیح:
package main
import (
“fmt”
“strconv”
)
func main() {
// Declare a string a and an integer b
a, b := “233”, 223
// Use Atoi to convert an integer to a string
c, _ := strconv.Atoi(a)
// Use Sprintf and Itoa functions respectively
// to convert a string to an integer
d1 := fmt.Sprintf(“%d”, b)
d2 := strconv.Itoa(b)
fmt.Printf(“The type of a: %T\n”, a) // string
fmt.Printf(“The type of b: %T\n”, b) // int
fmt.Printf(“The type of c: %T\n”, c) // int
fmt.Printf(“The type of d1: %T\n”, d1) // string
fmt.Printf(“The type of d2: %T\n”, d2) // string
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی مورد انتظار به شرح زیر است:
The type of a: string
The type of b: int
The type of c: int
The type of d1: string
The type of d2: string
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در برنامه از Sprintf() تابع از fmt بسته ای که دارای فرمت زیر است:
func Sprintf(format string, a …interface{}) string
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
format یک رشته با دنباله های فرار است، a یک ثابت یا متغیر است که مقادیری را برای دنبالههای فرار ارائه میکند و … به این معنی است که می تواند چندین متغیر از همان نوع وجود داشته باشد a. رشته بعد از تابع نشان دهنده آن است Sprintf یک رشته را برمی گرداند. در اینجا مثالی از استفاده از این تابع آورده شده است:
a = Sprintf(“%d+%d=%d”, 1, 2, 3)
fmt.Println(a) // 1+2=3
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در این قطعه کد، format با سه متغیر عدد صحیح 1، 2 و 3 ارسال می شود %d کاراکتر فرار عدد صحیح در format با مقادیر صحیح جایگزین می شود و the Sprintf تابع پس از تعویض نتیجه را برمی گرداند، 1+2=3.
همچنین توجه داشته باشید که هنگام استفاده از strconv.Atoi() برای تبدیل یک عدد صحیح به رشته، تابع دو مقدار یعنی عدد صحیح تبدیل شده را برمی گرداند val و کد خطا err. چون در Go اگر متغیری را اعلام کنید باید از آن استفاده کنید، ما می توانیم از خط زیر استفاده کنیم _ برای اظهار نظر در مورد err متغیر
چه زمانی strconv.Atoi() به درستی تبدیل می کند، err صفر برمی گرداند هنگامی که در هنگام تبدیل خطایی رخ می دهد، err پیام خطا و مقدار را برمی گرداند val 0 خواهد بود. شما می توانید مقدار رشته را تغییر دهید a و زیرخط را با یک متغیر معمولی جایگزین کنید تا خودتان آن را امتحان کنید.
رشته های به هم پیوسته
ساده ترین راه برای به هم پیوستن دو یا چند رشته، استفاده از آن است + نماد ما همچنین می توانیم استفاده کنیم fmt.Sprintf() تابع به هم پیوستن رشته ها بیایید به یک مثال نگاه کنیم:
package main
import (
“fmt”
)
func main() {
a, b := “lan”, “qiao”
// Concatenate using the simplest method, +
c1 := a + b
// Concatenate using the Sprintf function
c2 := fmt.Sprintf(“%s%s”, a, b)
fmt.Println(a, b, c1, c2) // lan qiao labex labex
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی مورد انتظار به شرح زیر است:
lan qiao labex labex
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در برنامه هم از Sprintf() تابع از fmt بسته بندی برای به هم پیوستن رشته ها و چاپ نتایج.
حذف فاصله های پیشرو و انتهایی از یک رشته
ما می توانیم استفاده کنیم strings.TrimSpace عملکرد حذف فضاهای پیشرو و انتهایی از یک رشته. تابع یک رشته را به عنوان ورودی می گیرد و رشته را با حذف فاصله های پیشرو و انتهایی برمی گرداند. قالب به شرح زیر است:
func TrimSpace(s string) string
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در اینجا یک مثال است:
package main
import (
“fmt”
“strings”
)
func main() {
a := ” \t \n labex \n \t hangzhou”
fmt.Println(strings.TrimSpace(a))
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی مورد انتظار به شرح زیر است:
labex
hangzhou
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خلاصه
برای خلاصه کردن آنچه در این درس آموختیم:
رابطه بین رشته ها و کاراکترها
دو روش برای اعلام رشته ها
رشته های به هم پیوسته
حذف فضاهای پیشرو و انتهایی از یک رشته
در این درس رشته هایی که در زندگی روزمره استفاده می کنیم را توضیح دادیم. ما در مورد رابطه بین رشته ها و کاراکترها یاد گرفتیم، بر ایجاد و اعلان رشته تسلط یافتیم و اطلاعاتی در مورد توابع رشته های رایج به دست آوردیم.
در درس بعدی با ثابت ها آشنا می شویم.
🚀 هم اکنون تمرین کنید: برو String Fundamentals
می خواهید بیشتر بدانید؟
مقدمه
در درس قبلی، یاد گرفتیم که کاراکترها در Go با استفاده از UTF-8 کدگذاری می شوند و به عنوان یکی از آنها ذخیره می شوند. byte
یا rune
انواع حالا بیایید در مورد رشته که مجموعه ای از کاراکترها است صحبت کنیم. بیایید با هم در مورد آن بیاموزیم.
نکات دانش:
- رشته چیست
- ایجاد رشته
- اعلام یک رشته
- توابع رشته ای رایج
رشته چیست
در اولین برنامه ای که در Go یاد گرفتیم رشته را چاپ کردیم hello, world
.
رشته یک نوع داده پایه در Go است که به عنوان یک رشته واقعی نیز شناخته می شود. می توان آن را به عنوان مجموعه ای از شخصیت ها درک کرد و یک بلوک مداوم از حافظه را اشغال می کند. این بلوک حافظه می تواند هر نوع داده ای مانند حروف، متن، ایموجی و غیره را ذخیره کند.
با این حال، بر خلاف زبان های دیگر، رشته ها در Go فقط خواندنی هستند و نمی توان آنها را تغییر داد.
ایجاد رشته
رشته ها را می توان به روش های مختلفی اعلام کرد. بیایید نگاهی به روش اول بیندازیم. یک فایل جدید به نام ایجاد کنید string.go
:
touch ~/project/string.go
کد زیر را بنویسید:
package main
import "fmt"
func main() {
// Use the var keyword to create a string variable a
var a string = "labex"
a = "labex" // Assign "labex" to variable a
// Declare variable a and assign its value
var b string = "shiyanlou"
// Type declaration can be omitted
var c = "Monday"
// Use := for quick declaration and assignment
d := "Hangzhou"
fmt.Println(a, b, c, d)
}
کد بالا نحوه ایجاد رشته ها را با استفاده از نشان می دهد var
کلمه کلیدی و :=
اپراتور اگر هنگام ایجاد متغیر با var
، می توانید اعلان نوع را حذف کنید، همانطور که در ایجاد متغیر نشان داده شده است b
.
خروجی مورد انتظار به شرح زیر است:
labex shiyanlou Monday Hangzhou
اعلام یک رشته
در بیشتر موارد، از دو نقل قول استفاده می کنیم ""
برای اعلام رشته ها مزیت دو نقل قول این است که می توان از آنها به عنوان دنباله فرار استفاده کرد. به عنوان مثال در برنامه زیر از عبارت استفاده می کنیم \n
دنباله فرار برای ایجاد یک خط جدید:
package main
import "fmt"
func main(){
x := "shiyanlou\nlabex"
fmt.Println(x)
}
خروجی مورد انتظار به شرح زیر است:
shiyanlou
labex
در اینجا چند توالی فرار رایج وجود دارد:
نماد | توضیحات |
---|---|
\n |
خط جدید |
\r |
بازگشت کالسکه |
\t |
Tab |
\b |
بک اسپیس |
\\ |
بک اسلش |
\' |
نقل قول واحد |
\" |
دو نقل قول |
اگر میخواهید قالب اصلی متن را حفظ کنید یا نیاز به استفاده از چندین خط دارید، میتوانید از بکتیک برای نمایش آنها استفاده کنید:
package main
import "fmt"
func main() {
// Output Pascal's Triangle
yangHuiTriangle := `
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1`
fmt.Println(yangHuiTriangle)
// Output the ASCII art of "labex"
ascii := `
# ## # # ### # ## ####
# # # ## # # # # # # # #
# # # # # # # # # # # # #
# ##### # # # # # # # ##### # #
# # # # ## # # # # # # #
##### # # # # ## # # # # ### `
fmt.Println(ascii)
}
پس از اجرای برنامه، خروجی زیر را مشاهده خواهید کرد:
بکتیک معمولاً در درخواستها، قالبهای HTML و سایر مواردی که باید فرمت اصلی خروجی را حفظ کنید، استفاده میشود.
به دست آوردن طول یک رشته
در درس قبل یاد گرفتیم که کاراکترهای انگلیسی و علائم نگارشی عمومی یک بایت و حروف چینی سه تا چهار بایت را اشغال می کنند.
بنابراین در Go می توانیم از len()
تابعی برای بدست آوردن طول بایت یک رشته. اگر هیچ کاراکتری وجود نداشته باشد که چندین بایت را اشغال کند، len()
تابع را می توان برای اندازه گیری تقریباً طول رشته استفاده کرد.
اگر یک رشته دارای کاراکترهایی است که چندین بایت را اشغال می کنند، می توانید از آن استفاده کنید utf8.RuneCountInString
تابع برای بدست آوردن تعداد واقعی کاراکترهای رشته.
بیایید یک مثال را ببینیم. کد زیر را در آن بنویسید string.go
فایل:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
// Declare two empty strings using var and :=
var a string
b := ""
c := "labex"
// Output byte length
fmt.Printf("The value of a is %s, the byte length of a is: %d\n", a, len(a))
fmt.Printf("The value of b is %s, the byte length of b is: %d\n", b, len(b))
fmt.Printf("The value of c is %s, the byte length of c is: %d\n", c, len(c))
// Output string length
fmt.Printf("The length of d is: %d\n", utf8.RuneCountInString(d))
}
خروجی مورد انتظار به شرح زیر است:
The value of a is , the byte length of a is: 0
The value of b is , the byte length of b is: 0
The value of c is labex, the byte length of c is: 5
The length of d is: 9
در برنامه ابتدا دو رشته خالی و رشته را اعلام کردیم labex
. می بینید که طول بایت و طول واقعی آنها یکسان است.
تبدیل رشته ها و اعداد صحیح
ما می توانیم از توابع استفاده کنیم strconv
بسته برای تبدیل بین رشته ها و اعداد صحیح:
package main
import (
"fmt"
"strconv"
)
func main() {
// Declare a string a and an integer b
a, b := "233", 223
// Use Atoi to convert an integer to a string
c, _ := strconv.Atoi(a)
// Use Sprintf and Itoa functions respectively
// to convert a string to an integer
d1 := fmt.Sprintf("%d", b)
d2 := strconv.Itoa(b)
fmt.Printf("The type of a: %T\n", a) // string
fmt.Printf("The type of b: %T\n", b) // int
fmt.Printf("The type of c: %T\n", c) // int
fmt.Printf("The type of d1: %T\n", d1) // string
fmt.Printf("The type of d2: %T\n", d2) // string
}
خروجی مورد انتظار به شرح زیر است:
The type of a: string
The type of b: int
The type of c: int
The type of d1: string
The type of d2: string
در برنامه از Sprintf()
تابع از fmt
بسته ای که دارای فرمت زیر است:
func Sprintf(format string, a ...interface{}) string
format
یک رشته با دنباله های فرار است، a
یک ثابت یا متغیر است که مقادیری را برای دنبالههای فرار ارائه میکند و ...
به این معنی است که می تواند چندین متغیر از همان نوع وجود داشته باشد a
. رشته بعد از تابع نشان دهنده آن است Sprintf
یک رشته را برمی گرداند. در اینجا مثالی از استفاده از این تابع آورده شده است:
a = Sprintf("%d+%d=%d", 1, 2, 3)
fmt.Println(a) // 1+2=3
در این قطعه کد، format
با سه متغیر عدد صحیح 1، 2 و 3 ارسال می شود %d
کاراکتر فرار عدد صحیح در format
با مقادیر صحیح جایگزین می شود و the Sprintf
تابع پس از تعویض نتیجه را برمی گرداند، 1+2=3
.
همچنین توجه داشته باشید که هنگام استفاده از strconv.Atoi()
برای تبدیل یک عدد صحیح به رشته، تابع دو مقدار یعنی عدد صحیح تبدیل شده را برمی گرداند val
و کد خطا err
. چون در Go اگر متغیری را اعلام کنید باید از آن استفاده کنید، ما می توانیم از خط زیر استفاده کنیم _
برای اظهار نظر در مورد err
متغیر
چه زمانی strconv.Atoi()
به درستی تبدیل می کند، err
صفر برمی گرداند هنگامی که در هنگام تبدیل خطایی رخ می دهد، err
پیام خطا و مقدار را برمی گرداند val
0 خواهد بود. شما می توانید مقدار رشته را تغییر دهید a
و زیرخط را با یک متغیر معمولی جایگزین کنید تا خودتان آن را امتحان کنید.
رشته های به هم پیوسته
ساده ترین راه برای به هم پیوستن دو یا چند رشته، استفاده از آن است +
نماد ما همچنین می توانیم استفاده کنیم fmt.Sprintf()
تابع به هم پیوستن رشته ها بیایید به یک مثال نگاه کنیم:
package main
import (
"fmt"
)
func main() {
a, b := "lan", "qiao"
// Concatenate using the simplest method, +
c1 := a + b
// Concatenate using the Sprintf function
c2 := fmt.Sprintf("%s%s", a, b)
fmt.Println(a, b, c1, c2) // lan qiao labex labex
}
خروجی مورد انتظار به شرح زیر است:
lan qiao labex labex
در برنامه هم از Sprintf()
تابع از fmt
بسته بندی برای به هم پیوستن رشته ها و چاپ نتایج.
حذف فاصله های پیشرو و انتهایی از یک رشته
ما می توانیم استفاده کنیم strings.TrimSpace
عملکرد حذف فضاهای پیشرو و انتهایی از یک رشته. تابع یک رشته را به عنوان ورودی می گیرد و رشته را با حذف فاصله های پیشرو و انتهایی برمی گرداند. قالب به شرح زیر است:
func TrimSpace(s string) string
در اینجا یک مثال است:
package main
import (
"fmt"
"strings"
)
func main() {
a := " \t \n labex \n \t hangzhou"
fmt.Println(strings.TrimSpace(a))
}
خروجی مورد انتظار به شرح زیر است:
labex
hangzhou
خلاصه
برای خلاصه کردن آنچه در این درس آموختیم:
- رابطه بین رشته ها و کاراکترها
- دو روش برای اعلام رشته ها
- رشته های به هم پیوسته
- حذف فضاهای پیشرو و انتهایی از یک رشته
در این درس رشته هایی که در زندگی روزمره استفاده می کنیم را توضیح دادیم. ما در مورد رابطه بین رشته ها و کاراکترها یاد گرفتیم، بر ایجاد و اعلان رشته تسلط یافتیم و اطلاعاتی در مورد توابع رشته های رایج به دست آوردیم.
در درس بعدی با ثابت ها آشنا می شویم.
🚀 هم اکنون تمرین کنید: برو String Fundamentals
می خواهید بیشتر بدانید؟