题解 | #字符串最后一个单词的长度#

字符串最后一个单词的长度

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从标准输入读取一行字符串。然后,使用strings.TrimSpace去除字符串两端的空格。接下来,使用strings.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正确读取字符串

知识考点:算法思想(双指针、排序、贪心算法、动态规划、二分查找、分治、搜索等),数据结构(字符串、数组、链表、树、栈和队列、哈希表等)

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:35
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务