我是一个入门的围棋编程语言,我是拉我的头发在这个例子程序。
通过$ go run <filename>.go 1 (或任何其他整数)执行程序
我的问题如下:
请集中注意程序中的以下一行
digit := stringOfDigits[column] - '0'如果我跑了
fmt.Println(stringOfDigits[column])这将返回50
如果我跑了
fmt.Println(digit)这将返回2
那么,50 - '0‘怎么等于2?
为什么stringOfDigits[column]返回50?就像50个人是怎么进去的?
还有,'0‘和’0‘之间有什么区别,引号重要吗?
在程序中,'0‘将在"0“将破坏程序的地方运行。
代码块:
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
func main() {
if len(os.Args) == 1 {
fmt.Printf("usage: %s <whole-number>\n", filepath.Base(os.Args[0]))
os.Exit(1)
}
stringOfDigits := os.Args[1]
for row := range bigDigits[0] {
line := ""
for column := range stringOfDigits {
digit := stringOfDigits[column] - '0'
if 0 <= digit && digit <= 9 {
line += bigDigits[digit][row] + " "
} else {
log.Fatal("invalid whole number")
}
}
fmt.Println(line)
}
}
var bigDigits = [][]string{
{" 000 ",
" 0 0 ",
"0 0",
"0 0",
"0 0",
" 0 0 ",
" 000 "},
{" 1 ", "11 ", " 1 ", " 1 ", " 1 ", " 1 ", "111"},
{" 222 ", "2 2", " 2 ", " 2 ", " 2 ", "2 ", "22222"},
{" 333 ", "3 3", " 3", " 33 ", " 3", "3 3", " 333 "},
{" 4 ", " 44 ", " 4 4 ", "4 4 ", "444444", " 4 ",
" 4 "},
{"55555", "5 ", "5 ", " 555 ", " 5", "5 5", " 555 "},
{" 666 ", "6 ", "6 ", "6666 ", "6 6", "6 6", " 666 "},
{"77777", " 7", " 7 ", " 7 ", " 7 ", "7 ", "7 "},
{" 888 ", "8 8", "8 8", " 888 ", "8 8", "8 8", " 888 "},
{" 9999", "9 9", "9 9", " 9999", " 9", " 9", " 9"},
}发布于 2013-08-08 03:27:15
值'0'是一个字符,不等于0。'0'实际上是一个符文文字,它由一个等于48的字符(字节)组成。stringOfDigits[column]是byte。
当使用单个字符时,它将与ASCII表匹配。
为了获得正确的结果,可以从每个字节值中减去48,假设您只使用0-9个位数:
stringOfDigits[column] - 48 - ('0' - 48)我猜你是想忽略空格。空格等于32,因此您可以执行如下条件:
if stringOfDigits[column] == 32 { // Same thing: == ' '
continue;
}或者,您可以使用斯特康夫包来转换大于9的数字。
发布于 2013-08-22 21:35:55
'0'是一个具有值48的符文文字。The 说明书上说
一个符文文字表示一个符文常量,一个识别Unicode代码点的整数值。符文文字用单引号括起来的一个或多个字符表示。
文字符也是非类型化常量:
常量可以是类型化的或非类型化的。文字常量、true、false、iota和某些仅包含非类型化常量操作数的常量表达式是非类型化的。 常数可以通过常量声明或转换显式地给出类型,也可以在变量声明或赋值中或作为运算数在表达式中隐式使用。
这意味着在这个短语中:
digit := stringOfDigits[column] - '0'常量'0'和结果变量digit都将隐式地从表达式stringOfDigits[column]获取它们的类型,表达式stringOfDigits[column]的类型是byte (uint8的别名),因为stringOfDigits是string。
digit成为byte(2)的唯一方法是stringOfDigit[column]是byte(50),也可以拼写为byte('2')。
50 - '0'就是这样变成2的。
https://stackoverflow.com/questions/18115458
复制相似问题