题解 | #字符串最后一个单词的长度#
字符串最后一个单词的长度
https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da
package main import ( "bufio" "fmt" "os" "strings" ) func main() { // 读取输入字符串 reader := bufio.NewReader(os.Stdin) str, _ := reader.ReadString('\n') str = strings.TrimSpace(str) // 按空格分割字符串,并取最后一个单词 words := strings.Split(str, " ") lastWord := words[len(words)-1] // 输出最后一个单词的长度 fmt.Println(len(lastWord)) }
正确示例
这段代码首先使用bufio.
NewReader
从标准输入读取一行字符串。然后,使用string
s.TrimSpace
去除字符串两端的空格。接下来,使用string
s.Split
函数按空格将字符串分割成单词数组,并取最后一个单词。最后,使用fmt
.Println
输出最后一个单词的长度。
请注意,此代码假设输入的字符串只包含字母、数字和空格,并且最后一个单词之后没有其他字符。如果输入字符串中包含其他特殊字符,请提供更详细的输入和输出示例,以便我可以进一步修改代码。
错误示例
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾),以下代码输出为什么不对?
package main import ( "fmt" ) func strLen(str string) int { n := len(str) count := 0 for i := n - 1; i >= 0; i-- { if str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z' { count = count + 1 } else { break } } return count } func main() { var a string fmt.Scan(&a) fmt.Println(strLen(a)) }
这段代码的问题在于,错误使用了扫描输入,未能正确使用不bufio.Reader正确读取字符串
它只检查了最后一个单词的长度,而没有考虑到字符串中可能存在空格,从而导致结果不正确。
package main import ( "fmt" "strings" ) func strLen(str string) int { words := strings.Split(str, " ") lastWord := words[len(words)-1] return len(lastWord) } func main() { var a string fmt.Scan(&a) fmt.Println(strLen(a)) }
代码使用了strings.Split函数将字符串按空格分割成单词数组,然后取最后一个单词并返回其长度。
这段代码的问题在于,错误使用了扫描输入,未能正确使用不bufio.Reader正确读取字符串
package main import ( "fmt" "strings" ) func strLen(str string) int { words := strings.Split(strings.TrimSpace(str), " ") lastWord := words[len(words)-1] return len(lastWord) } func main() { var a string fmt.Scan(&a) fmt.Println(strLen(a)) }
修改后的代码使用了strings.TrimSpace
函数去除字符串两端的空格,然后再使用strings.Split
函数将字符串按空格分割成单词数组,取最后一个单词并返回其长度。
这段代码的问题在于,错误使用了扫描输入,未能正确使用不bufio.Reader正确读取字符串
package main import ( "fmt" "strings" ) func strLen(str string) int { words := strings.Fields(str) lastWord := words[len(words)-1] return len(lastWord) } func main() { var a string fmt.Scan(&a) fmt.Println(strLen(a)) }
修改后的代码使用了strings.Fields
函数将字符串按空格分割成单词数组,然后取最后一个单词并返回其长度。
这段代码的问题在于,错误使用了扫描输入,未能正确使用不bufio.Reader正确读取字符串
知识考点:算法思想(双指针、排序、贪心算法、动态规划、二分查找、分治、搜索等),数据结构(字符串、数组、链表、树、栈和队列、哈希表等)