замените литерал символа в строке

#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: Так использовать строку? Почему важно, чтобы это был символьный литерал? Вы можете взять символьный литерал и создать из него строку, если почему-то важно начинать с одного символа.