Maison  >  Article  >  développement back-end  >  Comment ajouter des zéros aux éléments de chaîne découpés en 2D

Comment ajouter des zéros aux éléments de chaîne découpés en 2D

PHPz
PHPzavant
2024-02-13 15:20:081117parcourir

Comment ajouter des zéros aux éléments de chaîne découpés en 2D

En programmation PHP, la manipulation de chaînes est l'une des tâches courantes. Une tâche courante consiste à ajouter des zéros aux éléments de chaîne de tranche 2D. En ajoutant des zéros aux éléments de chaîne, vous pouvez garantir que la longueur de la chaîne est cohérente et faciliter le traitement et la comparaison ultérieurs. Alors, comment réaliser cette tâche ? Ci-dessous, l'éditeur PHP Banana vous présentera en détail comment ajouter des zéros aux éléments de chaîne de tranche bidimensionnelle.

Contenu de la question

La tâche consiste à ajouter des zéros aux éléments de chaîne d'une tranche 2D. L'entrée standard est donc [["7" "3" "1"]["2" "9"]] Je dois ajouter le zéro du dernier élément de chaque tranche au premier élément. Pour chaque pas, le compteur zéro est incrémenté de +1. Par conséquent, la sortie standard devrait être [["700", "30", "1"]["20", "9"]].

J'ai essayé un tel algorithme mais je n'ai pas pu obtenir la réponse attendue. Voici mon code :

package main

import (
    "fmt"
    "strings"
)

func addZero(strs [][]string) [][]string {
    zero := "0"
    counter := 0
    for i := range strs {
        for j := range strs[i] {
            strs[i][j] += strings.Repeat(zero, counter)
        }
        counter++
    }
    return strs
}

func main() {
    fmt.Println(addZero([][]string{{"7", "3", "1"}, {"2", "9"}}))// here the result is [[7 3 1] [20 90]]
 
}

Comment puis-je modifier mon code pour obtenir la réponse attendue ?

Solution de contournement

Le compte zéro doit être réinitialisé à chaque ligne, alors déplacez ce code à l'intérieur de la première boucle.

La plage commence aussi à l'index 0 开始,并且您希望从行尾开始增加零,因此 counter 必须从 len(strs[i])-1 et il faut la décrémenter :

func addzero(strs [][]string) [][]string {
    for i := range strs {
        zero := "0"
        counter := len(strs[i]) - 1
        for j := range strs[i] {
            strs[i][j] += strings.repeat(zero, counter)
            counter--
        }
    }
    return strs
}

Après avoir effectué ces modifications, le résultat sera (essayez-le sur le go Playground) : p>

[[700 30 1] [20 9]]

Notez que si vous commencez à traiter les lignes à partir de la fin, le suffixe (zéros) à ajouter sera augmenté. Vous pouvez donc supprimer strings.repeat() en conservant et en "étendant" le suffixe précédent :

func addzero(strs [][]string) [][]string {
    for _, line := range strs {
        zeros := ""
        for i := len(line) - 1; i >= 0; i-- {
            line[i] += zeros
            zeros += "0"
        }
    }
    return strs
}

Cette sortie est la même. Essayez-le sur le go terrain de jeu.

Notez également que les chaînes peuvent être découpées et que le résultat partage la mémoire avec la chaîne découpée. C'est donc rapide et ne crée aucun déchet ! Vous pouvez construire une longue chaîne zeros contenant uniquement des zéros, et cette longue chaîne peut être découpée pour contenir autant de zéros que vous le souhaitez. Cette solution évite toute allocation et concaténation de chaînes inutiles :

var zeros = strings.Repeat("0", 1000) // Use the maximum length here

func addZero(strs [][]string) [][]string {
    for _, line := range strs {
        count := len(line) - 1
        for i := range line {
            line[i] += zeros[:count-i]
        }
    }
    return strs
}

Cela affiche à nouveau le même contenu, veuillez l'essayer sur le go terrain de jeu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer