gpt4 book ai didi

arrays - 连接字符数组元素

转载 作者:行者123 更新时间:2023-12-03 00:37:45 24 4
gpt4 key购买 nike

输入一个字母数字字符串,发送到低位,然后求值。然后,需要将每个第三个字母大写并返回字符串。数字/字母位置并不总是相同。

样本输入处理:

$in = read-host "value in"
$var1 = $in.tolower()

因此,我给出了两个可以用作示例的变量
$var1 = 1ab23c4def56
# $var1 = a123bcd45e6f # alternate $var1 for example purposes

$val = ($var1).ToCharArray()

foreach ($n in $val){
if ($n -notmatch "[0-9]"){
$alfaNo++
if ($alfaNo -eq 4){
$o = $([char]::ToUpper($n))
$alfaNo = 0
$n = $o
}
echo $n
}
else {echo $n}
}
$val

问题是循环显示每个合适的字符都在上,但是当 $val显示在末尾时并没有进行更改。

最佳答案

看起来您正在处理范围问题。在ForEach循环中,变量位于不影响其来源数组的范围内。一个无需完全重写的简单修改就是简单地添加一个新变量,并将其设置为ForEach循环的输出,然后让ForEach循环输出$n而不是回显(或附加)。

现在,据我所知,您的If语句是错误的,正确的字母实际上没有被大写,但除此之外,这至少可以让您的代码按需运行:

$var1 = "1ab23c4def56"
# $var1 = a123bcd45e6f # alternate $var1 for example purposes

$val = ($var1).ToCharArray()
$alfaNo = 0
$NewVal = foreach ($n in $val){
if ($n -notmatch "[0-9]"){
$alfaNo++
if ($alfaNo -eq 4){
$o = $([char]::ToUpper($n))
$alfaNo = 0
$n = $o
}

}
$n
}
$newval -join ''

我个人会使用 Switch命令而不是所有这些 ForEach语句的 If。就像是:
$var1 = "1ab23c4def56"
# $var1 = a123bcd45e6f # alternate $var1 for example purposes

$inc = 0
$NewVal = Switch($var1 -Split ''){
{$_ -match "\d"} {$_;continue}
{$_ -match "[a-z]" -and $inc -lt 2} {$_;$inc++;continue}
{$_ -match "[a-z]"} {$inc = 0;[char]::toupper($_)}
}
$NewVal -join ''

关于arrays - 连接字符数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com