#string #go
#строка #Вперед
Вопрос:
Какой самый простой способ заменить литерал символа в строке в golang?
Вот код C, где мы заменяем пробел на ‘3’:
#include <stdio.h>
#include <string.h>
int main(){
char input[] = "Look ma no hands";
printf("Input "%s" ", input);
for (int i = 0; i < strlen(input); i ){
//printf("input[%d] is %cn", i, input[i]);
if ( input[i] == ' ' ){
input[i] = 3;
}
}
printf(",converted to :%sn", input);
return 0;
}
Вывод:
$ ./a.out
Input "Look ma no hands" ,converted to :Lookmanohands
Как мы можем это сделать в golang?
Ответ №1:
Это ближайший пример c, который я мог бы сделать:
func main() {
input := "Look ma no hands"
var b strings.Builder
b.Grow(len(input))
for _, p := range input[:] {
if p == ' '{
fmt.Fprintf(amp;b, "%c", '3')
}else{
fmt.Fprintf(amp;b, "%c", p)
}
}
s := b.String()
fmt.Println(s)
}
Но, как вы можете видеть, мы не можем изменить исходную строку, поэтому мы не «заменяем» исходную строку, а создаем новую строку.
Комментарии:
1. play.golang.org/p/xzzT1EKncwP — Я пробовал это, однако
strings.Replace
ожидает строку. не литерал символа2. В go lang все строки являются константами, вы не можете просто заменить один символ в строке, вы должны назначить новый.
3. @struggling_learner: Так использовать строку? Почему важно, чтобы это был символьный литерал? Вы можете взять символьный литерал и создать из него строку, если почему-то важно начинать с одного символа.