不要谷歌“谷歌”


158

我们都知道,如果您用谷歌搜索“ google”一词,它将破坏互联网。

您的任务是创建一个接受一个字符串并以最少的Unicode字符返回其长度的函数。

但是,如果给定的字符串为google(小写),则将导致错误。

例如,g('bing')将返回4g('google')将导致错误。

请提供用法示例,并尽可能给出错误信息。


122
我用google搜索google,然后Google在Google上找到了Google。神话破灭。
Geobits

86
@Geobits这只是一个测试,看看我是否会用Google谷歌搜索,而我不会。:D
rybo111

7
该功能是否需要区分大小写?它应该在给定'gOOgle'时抛出吗?
AXMIM 2015年

2
当我将google输入google(chrome中的搜索栏)时,出现一条消息,询问我是否要访问google。(现在,这是一个tld,这很有意义,即com.google可以正常工作)。我单击它,并收到DNS查找错误。互联网:坏了!
克雷格2015年

4
我正在投票重新打开此文件。对于此挑战的错误原因,我没有任何疑问,它已经有154个答案,因此我认为更改规格并不公平。这可能不是一个好问题的例子,但很明显。如果答案确实归结为某个输出是否是错误,那么无论如何它可能只会得到不那么多的支持。

Answers:


228

python 2,29

lambda x:len(x)/(x!='google')

给出ZeroDivisionErroron "google",否则给出长度。这利用了Python的布尔等于0和的优势1


2
+1。不过,您需要将设置glambda,或通过输入匿名调用。
扎克·盖茨

4
只是为了好玩,我在JavaScript ES6中尝试了这种技术。它最终在25,但返回Infinity“谷歌”而不是抛出错误...
ETHproductions

18
@ZachGates 关于meta共识是,除非明确禁止,否则允许匿名函数。由于该问题似乎暗示了这样的含义(但尚未明确禁止),因此您应该向OP询问。
FryAmTheEggman 2015年

3
@Kevin return如果使用的话,您需要一个def
FryAmTheEggman

3
有趣的是,翻译成Pyth的比我以前最好的Pyth解决方案要好。它是L/lbnb"google13个字节。
isaacg 2015年

107

Excel,23个字符

将其粘贴到A1以外的其他单元格中,然后将搜索查询键入A1中。

=LEN(A1)/(A1<>"google")

例如:

GoogleGoogle


9
使用Excel的普遍共识是什么?
Beta Decay 2015年

52
@BetaDecay。创意,罕见,似乎可行。不适用于所有CG拼图,但就在这里!
kdbanman

119
管理人员喜欢它!
lkraider

18
如此高效,CG用户会为此而讨厌您。可是等等。B3将永远改变您的生活!
Sumurai8

8
使用Excel的具体共识是什么?
GreenAsJade 2015年

81

C#,43个字节

萨拉赫·阿拉米(Salah Alami)的答案有所改善。递归以在提供“ google”时引发堆栈溢出异常

int g(string s)=>s!="google"?s.Length:g(s);

2
是的,我认为这是保存某些字符以引发异常的一种非常聪明的方法。不确定4个字符,这可能是在C#中引发异常的最小方法。
DLeh 2015年

6
这很聪明!但是,最新版本的C#支持尾部递归,因此该函数永远不会抛出StackOverflowException。实际上,它永远不会返回(表现为while(true){})。
NightElfik

2
@DLeh尾递归调用有些棘手。您必须在x64 JIT上运行且没有调试器(由于明显的原因,附加的调试器将导致尾部递归无效)。这是我的程序作为证明:imgur.com/ErNl8LJ和有关尾递归的更多信息: blogs.msdn.com/b/davbr/archive/2007/06/20/… ;)
NightElfik 2015年

12
哈哈:g(string)...我会让自己出来的……
gregsdennis

1
@DLeh哦,不,我可以匹配您的43个字节,但不能击败它。:) int g(string s)=> s!=“ google”?s.Length:s [9];

57

Pyth,14个 13个字符

L/lbnb"google

定义一个命名函数 y

如果字符串不是google,则将长度除以1,否则将其除以0。这个想法并不新颖,但我是独立提出的。

在线尝试。

这个怎么运作

L                 Define y(b):
  lb                Compute len(b).
    nb"google       Compute (b != "google").
 /                  Set _ = len(b) / (b != "google").
                  Return _. (implicit)

是的,我实际上不确定这一点,我不认为以前使用字符串会发生这种情况。通常,您可以用它关闭它,;但显然您不能在这里...
FryAmTheEggman 2015年

您不需要结尾引号。
Maltysen

48
定义一个命名函数y ”但是y您的代码中没有!!
AL

46
@AL是的。内置L重新定义功能y
丹尼斯

90
我不确定,但我想我讨厌佩斯。
李斯特先生,2015年

40

MATLAB,63 41 40 38 36字节

感谢Tom Carpenter削减了1个字节!

感谢Stewie Griffin削减了2个字节!

@(x)nnz(x(+~strcmp('google',x):end))

与其他更优雅的解决方案不同,在MATLAB中执行零除运算不会产生错误,而是Inf。此解决方案找到字符串的长度是为了确保相等性检查的输出是数字而不是Boolean / 。省略会产生警告,但由于此挑战的规范不允许发出警告,因此需要…从而完成了代码。nnz。生成的字符串的方式是您从字符串的开头到结尾(基本上是字符串的副本)建立索引。但是,重要的是通过检查输入是否等于来生成访问字符串的起点'google'。如果不是,则生成的起始索引为1,而我们通常以字符串的形式索引...当MATLAB从1开始索引时。如果相等,则生成的索引为0,MATLAB将抛出索引错误,指出index必须为正整数。额外的+logical++

示例用途

>> f=@(x)nnz(x(+~strcmp('google',x):end)) %// Declare anonymous function

f = 

    @(x)nnz(x(+~strcmp('google',x):end))

>> f('bing')

ans =

     4

>> f('google')
Subscript indices must either be real positive integers or logicals.

Error in @(x)nnz(x(+~strcmp('google',x):end))

一个更有趣的版本,83 77 76 74 72字节

感谢Tom Carpenter削减了1个字节!

感谢Stewie Griffin削减了2个字节!

@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end');

以上不是官方提交的内容,但是运行起来有点有趣。滥用eval匿名函数中的代码是:检查输入字符串是否等于'google'...,如果是,它将打开MATLAB的内置网络浏览器并显示Google的404错误页面试图访问子页面位于i不存在的时间。如果不是,我们将正常显示字符串的长度。

示例用途

>> f=@(x)eval('if strcmp(''google'',x),web([x ''.com/i'']);else nnz(x),end'); %// Declare anonymous function
>> f('bing')

ans =

     4

>> f('google')
>> 

使用的最后一个电话'google'给我们以下屏幕:

enter image description here


3
您可以使用strcmp代替来保存一个字节isequal
汤姆·卡彭特

@TomCarpenter-好笑。我实际上告诉自己要使用,strcmpisequal由于某种原因最终使用了...。谢谢!
rayryeng

1
nnz比短2个字节numel。几年前,你有我的投票权:-)
Stewie Griffin

31

的JavaScript ES6,34 27 25个字符

f=>f=='google'?Δ:f.length

Δ为Google 抛出ReferenceError 。


10
您可以使用三元运算符来保存两个字节。
Konrad Borowski

2
是的,这正是我刚得到的。如果想花哨的话,请使用人们从不使用的符号代替g,以确保它不会作为全局变量存在。Δ代表一个很好的变量名:)
Domino

1
您可以使用#JS afaik中的错误,在
拍手

7
ΔGoogle Illuminati确认
DynamiteReed 2015年

2
我只想把它留在这里github.com/Rabrennie/anything.js
sagiksp

26

TI-BASIC,15字节

哎呀,虽然我们正在讨论,不妨在这里获得TI-BASIC的答案。

输入格式为"string":prgmNAME。感谢托马斯土瓜湾为先找到它!

length(Ans)+log(Ans≠"GOOGLE

(指南:每个小写字母添加1个字节,以替换大写字母。因此s/GOOGLE/google/g => +6 bytes。)

ahhhhh测试用例!

"GOGGLE":prgmG
               6
"BING":prgmG
               4
"GOOGLE":prgmG
           Error

20个字节:length(Ans)/(Ans≠"google。您也有错的情况;如果允许大写,则为14个字节。顺便说一句,通过Ans传递参数是有效的。
lirtosiast

AGOOGLE应该给7,正确吗?而且您不应该在代码大小中计算程序头,因此请减去10个字节。
lirtosiast

错误:我在想子字符串。请原谅我。
Conor O'Brien 2015年

1
@ThomasKwa我没有在代码中看到您的评论。碰巧的是,我们都偶然发现了相同的解决方案。但是,如果您认为自己应该得到信用,则信用应归您所有。^ _ ^(编辑,如果您愿意阅读代码,则不尽相同。)
Conor O'Brien

@lirtosiast length(是两个字节,这将使您的数字分别为21和15个字节。
Timtech '16

23

APL(14)

(⍴÷'google'∘≢)

说明:

  • : 长度
  • ÷: 除以
  • 'google∘≢:参数不等于'google'。

给人的串,它是由1,如果该字符串不等于划分的长度google(这给长度背面不变),或者通过0,如果该字符串等于google(给出一个错误)。


11
我认为您不需要计算括号,因为可以将它们分配给没有它们的变量。
jimmy23013 2015年

Kind-of对单字符参数失败。替换为进行修复。另外,您可以通过交换操作数来使其看起来更酷。哦,别忘了删除括号。所有功能于一切:≢÷≢∘'google'
亚当

21

Python 3,30个字节

lambda u:[len][u=='google'](u)

索引1元素函数列表,IndexError如果u=='google'谓词为True(= 1),则引发一个。这样的功能。

多种变体。哇:

lambda u:[len(u)][u=='google']
lambda u:len([u][u=='google'])

如果挑战被取消(不是 “ google”的一切错误),可以保存一个字符:

lambda u:{'google':len}[u](u)

但是您已经知道长度,所以只需对其进行硬编码。


也适用于python 2.7
Noodle9

由于某种原因,我喜欢这种解决方案。
foslock

19

Haskell,24个字节

g s|s/="google"=length s

输出:

Main> g "google"

Program error: pattern match failure: g "google"

Main> g "bing"
4

15

CJam,16个字符

{_,\"google"=!/}

如果字符串不是google,则将长度除以1,0。这个想法并不新颖,但我是独立提出的。

在线尝试。

这个怎么运作

_                 Push a copy of the string on the stack.
 ,                Compute the length of the copy.
  \               Swap the length and the original string.
   "google"=      Push 1 if the string is "google", 0 otherwise.
            !     Apply logical NOT. Maps 1 to 0 and 0 to 1.
             /    Divide the length by the Boolean.

有趣的是,一个完整的程序较短(15个字节): q_,\"google"=!/。在看到这篇文章之前进行了开发。请注意,这将接受整个输入(无论如何您似乎都将其作为函数参数)。不幸的是,您不能使用它,因为这需要一个功能:(
Erik the Outgolfer

15

八度,63字节

我知道它比Matlab解决方案(也可以在Octave中工作)更长,但是它特别邪恶。我使用包含必须依赖于参数传递的回调函数(本身,因此是递归的,邪恶的)的函数句柄的单元格数组(邪恶)的文字(邪恶)来制作匿名函数(邪恶)。然后创建另一个匿名对象,该匿名对象基本上将函数简化为字符串参数,并将第二个参数固定ff(非常邪恶)。任何理智的人都永远不会这样做,因为它几乎与Perl或regex(或cjam / pyth /任何其他esolang)一样不可读。

因此,如果字符串不是“ google”,则将调用单元格数组的第二个参数,该参数输出字符串的长度。否则,将调用第一个函数,该函数作为回调传递(并且也将自身作为回调传递给自身),而后者随后是函数本身。该错误基本上是一些最大递归深度错误。

f=@(s,f){@()f(s,f),numel(s)}{2-strcmp(s,'google')}();@(s)f(s,f)

2
在大多数语言中,那些事情并不邪恶。这就是代码高尔夫,这地球上一些最不可读的代码:)。顺便说一句。
2015年

9
我只eval在这里想让它真的很邪恶:-)
路易斯·门多


11

APL,19 17字节

{⍵≡'google':⍟⋄≢⍵}

这是一个未命名的monadic函数,如果输入为,将引发语法错误google。这可以通过尝试不做任何自然对数来完成。

{
 ⍵≡'google':          ⍝ If the right argument is "google"...
            ⍟⋄        ⍝ Compute log(<nothing>), which brings only sadness
              ≢⍵      ⍝ Otherwise compute the length
}

在线尝试

感谢丹尼斯,节省了两个字节!


被非正式地称为“ splat”。此用法的一个非常合适的名称。
2015年

9

R,46个字节

g=function(x)ifelse(x!="google",nchar(x),)

除非我读错了,否则原始帖子永远不会指定代码必须是正确的语法。

例:

> g("bing")
[1] 4
> g("google")
Error in ifelse(x != "google", nchar(x), ) : 
  argument "no" is missing, with no default

我从未为ifelse语句的“ no”参数添加任何内容,因此如果调用此参数,它将返回错误。


10
这是一个略短一些的:g=function(x)nchar(x)[[x!="google"]]
flodel

9

Perl,31个 29字节

sub{$_=pop;y///c/!/^google$/}

-2b多亏了manatwork

用法:

sub{$_=pop;y///c/!/^google$/}->("google")

如果我能摆脱程序而不是功能,则以下内容仅使用20个字节(+1字节命令行)才有效

$_=y///c/!/^google$/

误差为零。

说明:

y///c返回长度,!/^google$/如果输入匹配“ google” ,则将返回0。

用法:

perl -p entry.pl input.txt

2
您可以将其设为匿名函数:sub{…}。(然后您就这样称呼它了sub{…}->("google")。)
manatwork

使用$_!=google而不是!/^google$/
Gabriel Benamy '16

@GabrielBenamy恐怕!=无法比较字符串...
Dada

7

Haskell-30个字符

g"google"=error"!";g s=length s

>g "google"
 *Exception: !
>g "str"
 3

6
为什么用感叹号标记错误?空字符串也不会吗?
Kritzefitz

1
我想建议将其更改为x=x;g"google"=x;g s=length s,但是由于某些原因,ghci中不会引发<< loop >>异常。
Kritzefitz

17
g s|s/="google"=length s避免了需要error
chs 2015年

7

Python 3,35个字节

lambda n:len(n)if n!='google'else d

1
@FryAmTheEggman实际上短了16位。XD
DiegoDD

1
@FryAmTheEggman:很好的技巧,但id不能与空字符串一起使用:(lambda n:len(n)*(n!='google')or d)('')
pabouk

@pabouk非常正确,感谢您指出这一点。
FryAmTheEggman 2015年

7

Java 7:53 52字节

int g(String _){return"google"==_?0/0:_.length();} 

上面的代码将ArithmeticException被除以零或除以Stringgoogle。值得注意的是,==比较引用对于String对象不起作用。

Java 8:29个字节

(基于以下评论中的建议)

s->s=="google"?0/0:s.length()

1
您还可以使用Java 8的lambda声明:s->(s.equals("google")?null:s).length();
hjk 2015年

3
“需要注意的是==比较引用,不适用于String对象。” 实际上,所有字符串都是对象,因此将字符串与==Java中的字符串进行比较通常是行不通的(除非您依赖于字符串实习,这很不好)。也许您对JavaScript感到困惑?
gengkev

1
@gengkev如果它们都是乱扔垃圾,它将起作用,因为它是在字符串池中引用的同一对象。该规范给出了一个乱七八糟的东西,这里是一个乱七八糟的东西,所以它将起作用。
Yassin Hajaj 2015年

2
@YassinHajaj我同意规范将其作为字面值给出,但这仅是示例。如果还从stdin输入了给定的输入,或者从另一个单独编译的类中调用了该函数,则该函数应该执行相同的操作。无论如何,依赖编译器优化(字符串内部)是一个糟糕的主意,这就是我最初所说的。
gengkev

7

C ++ 11、54(代码)+ 14(#include)= 68

好吧,被零除只是不确定的行为,我不会称其为错误。所以我的方法。

#include<ios>
[](std::string s){return s!="google"?s.size():throw;};

用法

[](std::string s){return s!="google"?s.size():throw;}("google");

1
您可以调用size()以保存2个字节。在C ++ 14中,您也可以使用通用lambda并替换std::stringauto。您需要将实际值传递std::string给它,而不是const char*
isanae

@isanae我不知道std::stringsize()方法,谢谢。我知道在C ++ 14 lambda表达式通用的,但我不知道它会怎样帮助我,因为"string"就是const char*std::string
Zereges

1
@Zereges std::string拥有size()并且,length()因为它既是容器又是字符串。至于auto,你会用(std::string("google"))代替调用lambda ("google")。该问题仅说“接受1个字符串”,而没有指定“字符串”是什么。
isanae

@isanae C ++ 14还必须"google"s构造一个std::string:)
Quentin

@Zereges您可以简单throw;地触发std::terminate()(因为这里没有当前异常)。
昆汀2015年

6

MUMPS,28个字节

g(s) q $S(s'="google":$L(s))

用法:

>w $$g^MYROUTINE("bing")                                      
4
>w $$g^MYROUTINE("google")

<SELECT>g^MYROUTINE

为什么?好,$S[ELECT]基本上是一个紧凑的多子句if-else语句-几乎就像Haskell或Rust这样的语言中的模式匹配。除了...与Haskell或Rust中不同的是,不会检查模式的详尽性,因为“编译时安全”的概念与MUMPS完全无关。因此,如果您输入的是您没有考虑的模式,则会收到一个名为的可爱的运行时错误<SELECT>


6

红宝石,34 30 27 26

->x{x=='google'?t: x.size}

未知t引发异常。

->x{x=='google'?fail():x.size}

编辑:完全可读和较短的明显版本...

->x{x[x=~/^(?!google$)/..-1].size}

旧:看起来与其他想法非常相似。ArgumentError如果x为“ google”,则将引发。


2
为什么要加上这些括号?x=='google'?t: x.size
manatwork

6

JavaScript,47个字节

漂亮又简单。

编辑:现在符合规则

function f(g){if(g=="google")a;return g.length}

测试中

引发错误

function f(g){if(g=="google")a;return g.length}

alert(f("Hello"))
alert(f("google"))
alert(f("hi"))

没有引发错误

function f(g){if(g=="google")a;return g.length}

alert(f("Hello"))
alert(f("bing"))
alert(f("hi"))


从技术上讲,这不符合OP的规格。此函数提示长度,但返回undefined
Bungle 2015年

@Bungle现在怎么样?
Beta Decay 2015年

1
@Bungle,我明白了。我忘了需要退货
Beta Decay 2015年

1
使用ES6的箭头函数和三元运算符(而不是if),您可以进行更多压缩:)
Carles Alcolea 2015年

1
@BetaDecay独创性;我尊重。
卡尔斯·阿尔科莱亚

6

C,66 48

原版的:

int l(long*s){return strlen(s)/((*s&~(-1L<<56))!=0x656c676f6f67);}

使用OSX gcc,
l("duck");返回4
l("google");原因Floating point exception: 8

在其他平台上,可能需要调整常量的字节序。

更短

减少棘手,结果相同。

 l(int*s){return strlen(s)/!!strcmp(s,"Google");}

哇,那是一些有趣的逻辑。如果我理解高尔夫球的部分是正确的,那么您将以某种方式将前六个字符转变为一个单一的,巨大的数字(几乎像一个哈希),由于堆栈为小尾数,因此最终为“ google”,但是向后(0x656c676f6f67= elgoog)。我认为这个答案需要对那些喜欢这种疯狂的低级知识的人做出解释。
Braden Best

你基本上有它。它只是将存储字符串的内存转换为64位数字。Endianness使它在x86架构上“落后”。文本仅占用7个字节,因此该掩码仅隐藏了内存中接下来的内容。这是一个有趣的技巧,但我认为'!! strcmp(s,“ google”)'实际上更短。
AShelly

1
无论如何,+ 1。绝对是 另外,我认为您可以通过删除int 4个字符来缩短它。
Braden Best

经过一番打字,我想通了!如果将char *,以的单位8-bits转换为long *,以的单位64-bits,而没有正确地重新分配,则这8个字节的堆空间中的数据将被破坏,并被视为一个数字(8*8 = 64)。这就是为什么您得到前6个字符+ NUL +垃圾的原因。那聪明。也很危险。想知道为什么它不分段。那第8个垃圾字节超出范围了,不是吗?
Braden Best

我看了你的分析。您是正确的,班次应该是56,而不是54。而且,我不会使用“损坏”一词。内存是相同的,只是位的解释不同。从技术上讲,访问垃圾字节是未定义的行为,并且实际上可能存在段错误。实际上,该字节几乎可以肯定地与字符串的其余部分位于同一合法内存块中,并且通常这些块(堆,堆栈,常量)至少以字大小的单位分配。因此,内存属于程序,它只包含字符串以外的内容。
AShelly

6

Ruby,29个字节

我首先想出的东西与@Borsunho的第一次尝试非常相似,但是我的时间稍长一些,他在我完成之前就发布了他的信息。在他进行30字节编辑之前想到了这个方法:)

->s{s[/^(?!google$).*/].size}

用法示例:

$ irb
2.2.1 :001 > f = ->s{s[/^(?!google$).*/].size}
 => #<Proc:0x007fa0ea03eb60@(irb):1 (lambda)> 
2.2.1 :002 > f[""]
 => 0 
2.2.1 :003 > f["bing"]
 => 4 
2.2.1 :004 > f["google"]
NoMethodError: undefined method `size' for nil:NilClass
  from (irb):1:in `block in irb_binding'
  from (irb):4:in `[]'
  from (irb):4
  from /Users/daniel/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'

编辑:两年后有一些Ruby版本

Ruby,25个字节

->s{+s[/^(?!google$).*/]}

替换String#size为新的一元加号。在线尝试!


整洁,我无法^使它正常工作(我没有想出要离开比赛组)。
Borsunho 2015年

@Borsunho我必须承认我只是“强行使用”了正则表达式,直到得到想要的结果.*为止:)我认为最后是使它起作用的原因。
daniero

如果输入字符串有多行并且在单独的行中包含google,则中断。我认为可以/\A(?!google\Z).*/m修复它(但是要花三个字节)。^$匹配行的开头和结尾,而匹配\A\Z匹配整个字符串的开头和结尾。
histocrat

@histocrat,但我认为您不能用多行Google字符串;)
daniero

4

> <>,​​55个字节

i:0(?v
31&l~<v0"google"~~.?%2l
$v?(2l<S?*=2l=6:+={
&<;n

想通了,我会尝试一下,而不是我最好的高尔夫尝试或算法。本身不是一个功能,但是我认为这应该仍然有效。我将查看是否可以编辑更好的版本。

如果允许打印长度然后输入错误,请使用以下46字节的解决方案:

i:0(?v
2lnl~<v0"google";?%
$;?(2l<S?*=2l=6:+={

这种性质的49字节以前的解决方案:

i:0(?v
l0nl~<v;!?=7
:;?(2l<S?*=2l=6:+=@@g3
elgoog

如果您有兴趣,我很乐意提出解释,如果我的回答有任何问题或您有高尔夫球的建议,请告诉我。


4

Javascript ES6、51 27 25字节

嗨,我是打高尔夫球的新手,所以它可能可以打更多的高尔夫球,但是在这里:

_=>_=="google"?a:_.length

g=_=>_=="google"?a:_.length

g=_=>{if("google"==_)throw Error();return _.length}

和一些测试:

(_=>_=="google"?a:_.length)("bing")//4
(_=>_=="google"?a:_.length)("google")// Error: a is not defined

g("bing")// returns 4
g("google")// Error: a is not defined

编辑:已添加?替换if并将Error替换为未定义的对象。

编辑2:我意识到我的字节数是错误的,并删除了g =


4

GolfScript,14个16个字符

{.,\'google'=!/}

像许多其他方法一样,只需将输入与之比较,'google'然后将长度除以结果的倒数即可。

示例程序:


@丹尼斯,我明白你的意思。它的原始形式不是完全可重用的(您不能说将代码应用于列表)。同样,我没有意识到您在发布CJam之前就已经在CJam中写了几乎相同的答案(实际上直到现在我才隐约意识到CJam是一种语言)。您的解决方案也可以+1。
pswg 2015年

4

卡住,16字节

s_l1u"google"=-/

采用与大多数人相似的方法,将导致输入“ google”时被0除的错误。


4

Windows Batch,118个字符

IF /I "%string%"=="google" exit
echo %string%> string.txt
for %%? in (string.txt) do ( SET /A stringlength=%%~z? - 2 )

输出为%stringlength%。

完整代码:

@echo off
del string.txt
cls
echo Type your string
echo.
set /p string=String:
IF /I "%string%"=="google" goto err
echo %string%> string.txt
for %%? in (string.txt) do ( SET /A stringlength=%%~z? - 2 )
cls
echo %stringlength%
pause
del string.txt
:err
color c
echo There seems to be an error with your input...
pause>nul

根据Joshua Honig的回答在此处进行了修改

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.