基本上我有#include<iostream>
using namespace std;
class Figura{
public:
int x;
int y;
virtual void pomak(int dx=10,int dy=1)
{
x+=dx;
y+=dy;
cout<<"Figura"<<endl;
}
};
class Skakac:public Figura{
public:
void pomak(int dx=2,int dy=-1)
{
cout<<dx<<endl;
x+=dx;
y+=dy;
cout<<"Skakac"<<endl;
}
};
int main()
{
Skakac S;
S.x=0;
S.y=0;
Figura* x=&S;
cout<<x->x<<" "<<x->y<<endl;
x->pomak();
cout<<S.x<<" "<<S.y<<endl;
}
,我想要一个单行程序将其转换为字符串“1,2,3”(我需要定制分隔符,有时[]int{1, 2, 3}
,有时{{} 1}}等。以下是我能想到的最好的。在网上搜索,似乎没有找到更好的答案。
在大多数语言中都有内置的支持,例如:
蟒:
.
转到:
,
当然必须有一个实用工具可以让我用一个班轮来做这件事吗?
我知道有> A = [1, 2, 3]
> ", ".join([str(a) for a in A])
'1, 2, 3'
,但只有在A已经是[]字符串时才有效。
答案 0 :(得分:71)
转换为
A := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
到一行分隔的字符串,如
“1,2,3,4,5,6,7,8,9”
使用方法:
strings.Trim(strings.Join(strings.Fields(fmt.Sprint(A)), delim), "[]")
或:
strings.Trim(strings.Join(strings.Split(fmt.Sprint(A), " "), delim), "[]")
或:
strings.Trim(strings.Replace(fmt.Sprint(A), " ", delim, -1), "[]")
并从此示例中的函数返回它:
package main
import "fmt"
import "strings"
func arrayToString(a []int, delim string) string {
return strings.Trim(strings.Replace(fmt.Sprint(a), " ", delim, -1), "[]")
//return strings.Trim(strings.Join(strings.Split(fmt.Sprint(a), " "), delim), "[]")
//return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(a)), delim), "[]")
}
func main() {
A := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
fmt.Println(arrayToString(A, ",")) //1,2,3,4,5,6,7,8,9
}
要在逗号后加一个空格,您可以调用arrayToString(A, ", ")
或相反地将返回定义为return strings.Trim(strings.Replace(fmt.Sprint(a), " ", delim + " ", -1), "[]")
以强制在分隔符后插入。
答案 1 :(得分:16)
我今天遇到了同样的问题,因为我在标准库上找不到任何东西,我已经重新编译了3种方法来进行这种转换
创建一个字符串,并通过使用strconv.Itoa转换它来附加数组中的值:
func IntToString1() string {
a := []int{1, 2, 3, 4, 5}
b := ""
for _, v := range a {
if len(b) > 0 {
b += ","
}
b += strconv.Itoa(v)
}
return b
}
创建一个[]字符串,转换每个数组值,然后从[] string:
返回一个连接的字符串func IntToString2() string {
a := []int{1, 2, 3, 4, 5}
b := make([]string, len(a))
for i, v := range a {
b[i] = strconv.Itoa(v)
}
return strings.Join(b, ",")
}
将[] int转换为字符串并替换/修剪值:
func IntToString3() string {
a := []int{1, 2, 3, 4, 5}
return strings.Trim(strings.Replace(fmt.Sprint(a), " ", ",", -1), "[]")
}
根据实施情况,表现完全不同:
BenchmarkIntToString1-12 3000000 539 ns/op
BenchmarkIntToString2-12 5000000 359 ns/op
BenchmarkIntToString3-12 1000000 1162 ns/op
就个人而言,我将使用IntToString2,因此最终的函数可能是我项目中的util包,如下所示:
func SplitToString(a []int, sep string) string {
if len(a) == 0 {
return ""
}
b := make([]string, len(a))
for i, v := range a {
b[i] = strconv.Itoa(v)
}
return strings.Join(b, sep)
}
答案 2 :(得分:6)
您可以随时json.Marshal
:
data := []int{1,2,3}
s, _ := json.Marshal(data)
fmt.Println(string(s))
// output: [1, 2, 3]
答案 3 :(得分:4)
我相信你可以使用fmt.Sprint
系列功能。我不是格式化标志的专家,也许你可以只使用Sprintf
制作它,但这里有一个有效的单行:
data := []int{1,2,3}
func(x string) string { return x[6:len(x)-1]; }(fmt.Sprintf("%#v", data)) // 1, 2, 3
通常,您可以使用strings.Replace
来创建不同的分隔符(只要您可以安全地替换,
或默认分隔符):
// Produces 1--2--3
magic := func(s, d string) string { return strings.Replace(s[1:len(s)-1], " ", d, -1) }
fmt.Println(magic(fmt.Sprint([]int{1, 2, 3}), "--"))
// As one liner
fmt.Println(func(s, d string) string { return strings.Replace(s[1:len(s)-1], " ", d, -1) }(fmt.Sprint([]int{1, 2, 3}), "--"))