Golang 面试题 将解析后的内容按行输出,字段之间以制表符(\t)分隔

该代码示例展示了如何在Go中编写一个程序,解析逗号分隔的字符串,并将内容转换成由制表符分隔的格式。程序处理了字段内逗号和双引号的情况,用特殊字符替换以避免混淆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
请完成以下任务:
    在此Pad中完成代码,不要将代码复制到外部IDE中。
    在完成面试后,请点击右下角的「End Interview」按钮。
    输入字符的规则:
        每行表示一条记录,字段之间以逗号(,)分隔。
        段需要用双引如果字段内容包含逗号(,),则该字段需要用双引号(")包裹。
        如果字段内容包含双引号("),则该字号包裹,并且字段内的每个双引号需要转义为两个双引号("")。
    编写解析程序,将解析后的内容按行输出,字段之间以制表符(\t)分隔。
    例子:
        输入:Cindy,47,"收藏,""爬山",New Task
        输出:Cindy 47 收藏,"爬山 New Task"
*/
package main

import (
	"fmt"
	"strings"
)

func main() {
	rows := `Cindy,47,"收藏,""爬山",New Task`
	execute(rows)
}

func execute(rows string) {
	msum := 0
	num := len([]rune(rows))
	out := make([]string, 0, 200)
	stemp := ""
	lenStemp := 0
	for i := 0; i < num; i++ {
		lenStemp = len(stemp)
		if string([]rune(rows)[i]) == "," && msum == 0 {
			out = append(out, stemp)
			stemp = ""

		} else if string([]rune(rows)[i]) == "\"" {
			if stemp == "" {
				stemp = "%"   // 用%代替
				msum += 1
			} else {
				if stemp[lenStemp-1:] == "*" {
					stemp = stemp[:lenStemp-1] + "\""
					msum -= 1
				} else {
					stemp = stemp + "*"   // 用*代替
					msum += 1
				}
			}
		} else if string([]rune(rows)[i]) == "," && msum == 2 && stemp[lenStemp-1:] == "*" {
			out = append(out, stemp[1:lenStemp-1]+"\"")
			stemp, msum = "", 0
		} else {
			stemp = stemp + string([]rune(rows)[i])
		}

	}
	if string([]rune(stemp)[0]) == "%" {
		out = append(out, stemp[1:lenStemp-1])
	} else {
		out = append(out, stemp)
	}

	joinStr := strings.Join(out, "\t")
	fmt.Println(joinStr)
}

欢迎大家指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值