大写字符串


18

给定一个字符串,将其大写。大写的意思是conTeNT-lENgth改变Content-Length。在示例中,我显示了带有2个单词的字符串-作为单词边界。但是,我希望您为包含以单个字符分隔的任意多个单词的边界的字符串编写代码。该边界可能会在整个字符串上变化。

条件

  1. 使用regular expressions不允许的
  2. 句子(字符串)中可以有任意数量的单词。
  3. 每个单词将由English大小写字母组成[a-zA-Z]
  4. 句子中的不同单词将由单个字符分隔。该角色将是任何一个-.<space-character>/&#。您可以放心地假设该句子除提及的字符外将包含任何其他字符。
  5. 字边界应保留在输出中。
  6. 最短的代码胜出。

例如你的程序应该输出Begin/With.Type&ContentBeGin/wITH.tyPE&conTeNt

Some test cases:
 "aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe" 
 "type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe" 
 "cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc" 
 "lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT" 
 "contENT/ACcEpT" 
 "BeGin/wITH.tyPE&conTeNt"
 "Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with" 
 "RaNgE&COnTeNT WITh CoNTENT-TypE tyPe"
 "BEgin COdE#uSeR#aGeNt.USeR"
 "TypE LENGth"

2
您所谓的大写实际上是向驼峰式大写字母的转换。
皮埃尔·阿劳

6
@ArlaudPierre不,他给的“测试用例”更像是骆驼的情况。大写字母更接近标题案例。
Iszi 2013年

您能否提供测试用例的预期输出?似乎某些内置函数可能假定全大写单词(如/CC/第2 -AND&行或第7行)应该保留不动。可以接受挑战吗?
Iszi 2013年

输入是始终以单词开头还是以分隔符开头?
lebatsnok

Answers:


7

GolfScript,36 27 19个字符

0\{95&+.47>32*\}%\;

一个非常基本的GolfScript方法,可根据规范适用于所有输入。这些示例可以在线进行测试。


凉。好奇我的解决方案是否至少是专业解决方案的两倍。:)但是,我敢肯定,您会在一天结束之前将其缩短几次。
manatwork 2013年

@manatwork现在我们有两个因数;-)对所有交换仍然不满意。
霍华德

我知道你不会让我失望。
manatwork 2013年

22

Python 3,22

print(input().title())

该代码将一个字符串作为来自stdin的输入,并将大写的输出提供给stdout。

例如:

输入:

BEGIN/wITH.tyPe&cOnTENt

输出:

Begin/With.Type&Content

以下代码用于多行输入(如有必要)

Python 3、46

import sys
for i in sys.stdin:print(i.title())

while 1:print(input.title())是最后一段较短的代码。
Ramchandra Apte

1
@RamchandraApte我不确定是否允许。您的代码在遇到EOF时便会因EOFError而死亡
Wasi 2013年

1
我认为高尔夫的普遍共识是,只要输出正确,错误就无关紧要
波动率

荡 我一看到这个问题,便想到了这个问题,但您却击败了我。+1
贾斯汀

+1我比golfscript更好,因为它看起来不像是一个an亵。
Tim Seguine 2014年

6

Mathematica 62

数据

tests={"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe","type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe","cc/rEspoNCe.lEngtH#tYpEwitH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc","lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT","contENT/ACcEpT","BeGin/wITH.tyPE&conTeNt","Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with","RaNgE&COnTeNT WITh CoNTENT-TypE tyPe","BEgin COdE#uSeR#aGeNt.USeR","TypE LENGth"}

StringReplace[ToLowerCase@#,WordBoundary~~x_:>ToUpperCase@x]&

用法

f["aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"]

“代理接受/长度类型用户范围。类型”

f /@ tests

{“ Agent接受/长度类型用户Range.Type”,
“ Type&Agent /抄送/内容长度#Accept / Agent.Range-Cc /内容/代码”,“ Cc / Responce.Length#Type-With&User / Begin&User.Agent&Begin /接受/抄送”,“长度#User.Type /开始和长度类型/接受#范围/代码和与接受/内容”,“内容/接受”,
“开始/包含。类型和内容”,
“ Code.Cc#User.Length-User -And&Type Type&Length.Type User.User&With”,
“具有Content-Type类型的范围和内容”,
“ Begin Code#User#Agent.User”,
“ Type Length”}


-1这基本上是正则表达式
CalculatorFeline

Mathematica可以直接运行正则表达式,但是我使用了其他东西。它与regex类似,但不是regex。
DavidC

%% %%% % %%
计算器

6

的JavaScript(94)

prompt().split(l='').map(function(a){return l='A'>l?a.toUpperCase():a.toLowerCase()}).join('')

5

PHP:78 73 65 64个字符

$b=ucfirst;foreach(str_split($s)as$c)echo$b($c),!$b[0]=$c<A?u:l;

输入传入$s。它以字符数组的形式对字符串进行操作。

这是一个简单的2状态机。它依赖于字符串的词汇顺序,并且在某些情况下,解析器会自动假定您要键入字符串。

状态存储在其中$b并表示为需要在下一个字符上调用的函数的名称。ucfirst并且lcfirst键入较短,并且与strtolower/ strtoupper在单个字符串上具有相同的行为。另外,由于它们仅相差一个字母,因此我们可以有效地使用它们来存储状态。原始版本需要将状态显式存储在布尔值中。

由于echo不会为布尔值false打印任何内容,因此我使用逗号和!运算符在echo语句中“隐藏”赋值(在这种情况下为true)。这使我可以通过删除来保存字符{}


请使用代码块标记而不是内联代码,因此诸如代码高尔夫用户脚本增强包之类的脚本可以在代码下方插入大小。顺便说一句,在您的代码中,所有3个空格字符都可以删除。
manatwork 2013年

而不是$b=ord($c)>64;尝试$b=$c>"@";。甚至$b=$c>=A;-AFAIR会发出警告,但是良好的编码实践在这里并不是一个优点。
manatwork 2013年

@manatwork谢谢,没想到。我已经对使用未设置的变量发出了警告。
Tim Seguine 2013年

嗯...不将$ b仅仅用作标志,而是将实际的函数名称存储在其中呢?$b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}
manatwork 2013年

@manatwork很棒!我试图考虑一种使用该功能的方法。我的尝试都更大了。
蒂姆·塞吉内

4

C,83

n;main(c){c=getchar();putchar(c>96?n?c:(n=c-32):c&64?n?c+32:(n=c):(n=0,c));main();}

接上线stdin,将其转换为stdout。(倾向于SIGINTEOF。)


4

动力壳:37-43

取决于您要如何输入...

提示用户输入:43

(Culture).TextInfo.ToTitleCase((read-host))

从管道中获取输入:38

(Culture).TextInfo.ToTitleCase($input)

运行脚本时提供输入作为参数:37

(Culture).TextInfo.ToTitleCase($args)

注意:上面的脚本将忽略全部大写的单词,使它们保持原样。如果需要考虑这一点,则应在标题大小写转换之前将输入强制为小写。这将第一种方法添加10个字符,将另外两个添加12个字符。

(Culture).TextInfo.ToTitleCase((read-host).ToLower())
(Culture).TextInfo.ToTitleCase("$input".ToLower())
(Culture).TextInfo.ToTitleCase("$args".ToLower())

根据规格不起作用。尝试foo:bar
Mormegil 2013年

@Mormegil哪一个?至少,读取主机版本对我来说很好用。我针对问题中的所有测试用例进行了测试,除我在问题注释中张贴的特殊情况外,它们均按预期返回。
Iszi 2013年

:(冒号)未在规则#4中列出为单词分隔符,因此AFAICS foo:bar应该导致Foo:bar而不是 Foo:Bar。但这只是我(非常严格)对规范的阅读。
Mormegil 2013年

2
@Mormegil好吧,这很干净。似乎已对规范进行了调整,以解决这种模糊性,同时又不会使此答案无效。
Iszi 2013年

1
您可以替换get-cultureculture; 参见codegolf.stackexchange.com/a/778/1308
DankoDurbić2013年

4

Java-209个字符

class C{
public static void main(String[]a){
for(String b:a){
char[]k=b.toLowerCase().toCharArray();
for(int i=-1;i<k.length;i++){if(i<0||"-. /&#".indexOf(k[i])>=0)k[++i]=(char)(k[i]-32);}
System.out.println(k);}}}

我添加换行符只是为了提高可读性。


3

R,143 116

一个解决方案可能会有点长,但是我们开始:

f=function(x){a=sapply(1:nchar(x),function(y)substr(tolower(x),y,y));d=c(1,which(!a%in%letters)+1);a[d]=toupper(a[d]);cat(a,sep="")}

略有偏离,并作了解释:

f <- function(x){
    #Split the string in characters and "lower-case" everything
    a <- sapply(1:nchar(x),function(y)substr(tolower(x),y,y))
    #Select the first character and each character following a 
    #character that doesn't belong to lower case alphabet
    d <- c(1,which(!a%in%letters)+1)
    #Make those ones uppercase.
    a[d] <- toupper(a[d])
    #Output (stdout) while pasting them back together.
    cat(a,sep="")
    }

编辑:116个字符

这里的主要挑战是矢量化substr。这是另一种不太冗长的方法。

f=function(x){n=1:nchar(x);a=mapply(substr,tolower(x),n,n);d=c(T,!a%in%letters);a[d]=toupper(a[d]);cat(a[n],sep="")}

缩进:

f <- function(x){
    n <- 1:nchar(x)
    a <- mapply(substr,tolower(x),n,n)
    d <- c(T,!a%in%letters) #This has been simplified as well
    a[d] <- toupper(a[d])
    cat(a[n],sep="") #Because a is now 1 char longer than x, need to subset a
    }

用法:

> f("aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe")
Agent Accept/Length-Type User Range.Type

您可以保存一些字符。由于a仅由小写字母组成,因此无需检查与大写字母是否匹配LETTERS
Sven Hohenstein 2013年

@SvenHohenstein的确如此,谢谢!
plannapus

另一个:您可以替换TRUET
Sven Hohenstein 2013年

本来我有tolower后来的。
plannapus

OK,这里的另一个;-)您可以替换mapply(substr,tolower(x),n,n) 使用strsplit(tolower(x),"")[[1]],以节省一个字符。
Sven Hohenstein 2013年

3

Befunge 98 - 24 45

~\j:'``!3*j' -;:'``b*j:'/`!3*j' +#;:,'/`!jc#@

写这个伤了我的大脑。

这将通过输入,~并且如果前一个字符是分隔符之一(或者如果没有前一个字符),它将执行

:'``!3*j' -;

该代码段采用字符,如果其ascii值大于或等于a,则从中减去32,从而将其更改为大写。如果小于a,则3*j跳过调整。之后,它将跳过下一部分。这部分处理从大写到小写的变化(我确定它可以与下一部分合并;我不确定如何):

:'``b*j:'/`!3*j' +#;

字符被打印(,),然后检查字符是否为边界之一:

'/`!

它基本上将字符与的ascii值进行比较/。如果字符不是边界,则代码会推送,12以便下次将跳过大写调整。#跳过结束程序:@,如果到达输入的末尾,~则将代码执行发送回@,结束程序。


3

Ruby:60 51 50 47个字符

$_.downcase.chars{|c|$><<$/=$/<?0?c.upcase: c}

样品运行:

bash-4.1$ for line in "${test[@]}"; do printf '%-75s | %s\n' "$line" "$( ruby -ne '$_.downcase.chars{|c|$><<$/=$/<?0?c.upcase: c}' <<< "$line" )"; done
aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe                                    | Agent Accept/Length-Type User Range.Type
type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe             | Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code
cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc          | Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc
lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT     | Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content
contENT/ACcEpT                                                              | Content/Accept
BeGin/wITH.tyPE&conTeNt                                                     | Begin/With.Type&Content
Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with           | Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With
RaNgE&COnTeNT WITh CoNTENT-TypE tyPe                                        | Range&Content With Content-Type Type
BEgin COdE#uSeR#aGeNt.USeR                                                  | Begin Code#User#Agent.User
TypE LENGth                                                                 | Type Length

1
是不是l==l.swapcase一样l<?0(未测试)?至少对于此任务允许的输入。
霍华德

是。现在,蝙蝠侠强调没有其他分隔符是必须的,确实那是较短的。谢谢@霍华德。
manatwork 2013年

2

C#– 110

一个简单的基于有限状态机的处理:

x.Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r

(其中,xstring大写)

当然,如果您想感到无聊(在更新规范之后),可以使用

new CultureInfo(9).TextInfo.ToTitleCase(x)

或者,对于所有无聊的样板:

class C{static void Main(string[]a){System.Console.WriteLine(new System.Globalization.CultureInfo(9).TextInfo.ToTitleCase(a[0]));}}

不,不会编译,因为C#不是脚本语言,您需要将其封装在类中。
皮埃尔·阿洛德

2
谁说的?Microsoft (R) Roslyn C# Compiler version 1.2.20906.1 Loading context from 'CSharpInteractive.rsp'. Type "#help" for more information. > "foobar".Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r "Foobar"但是,如果您真的在乎无聊的样板,请添加112个字符。
Mormegil 2013年

1
您可以从样板中剪切publicstring[]a
Johnbot,2013年

哦,是的,您是对的public,但是我需要论据,因为这就是我要处理的问题……
Mormegil 2013年

2

JavaScript 102

prompt().split(o=q='').map(function(c){o+=(q)?c.toLowerCase():c.toUpperCase(),q=('A'>c)?0:1})
alert(o)

您不需要()围绕三元条件。甚至,您不需要第二个三进制:function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}
manatwork 2013年

2

福斯135

: s swap ;
: c 1 begin key dup 96 > if s if 32 - then 0 s 
else dup 64 > if s 0= if 32 + then 0 s then else 1 s then then emit again ; c

转换后的输出stdout从中读取时被写入stdin


1
“然后再散发出”来回押韵!

2

Befunge-98(29),C(65)

由于方法/算法几乎相同,因此我将两个版本都包含在同一篇文章中。两者都依赖于跟踪最后一个字符是符号还是字母,以便知道是否将字母小写。

Befunge-98(29)
#@~:'0` #v_,0>
',++@'% '<   ^
C(65)
c,d;main(){for(;~(c=getchar());d=c>48)putchar(c<48?c:c&95|32*d);}


1

Excel VBA-11字符

在立即窗口中

?[Proper()]

VB脚本

Set xlapp = CreateObject("excel.application")
wscript.echo xlapp.Evaluate("Proper(""BeGin/wITH.tyPE&conTeNt"")"

您可以在使用方面提供一些帮助吗?我收到“编译错误:外部名称未定义”。(在“开发人员”选项卡上的Word 2013中,我单击了Visual Basic,然后在Visual Basic for Application中,将您的代码复制粘贴到“即时”窗口中,然后按Enter。)
manatwork 2013年

@manatwork我应该弄清楚它是在Excel中。您可以从Word中执行此操作,但是由于需要自动执行Excel,因此路径较长。
brettdj

1
凉。从Excel 2013启动VBA时,可以完美运行
。– manatwork

在Excel工作直接和:=PROPER(A1),也为11个字节
Wernisch

1

AWK, 113 103字节

{for(;++i<=split($0,a,"");){s=a[i]
O=O (L?tolower(s):toupper(s))
L=1
if(index("-. /&#",s))L=0}print O}

这适用于单行内容,但是对于多行输入,需要添加几个init

{O=""
for(L=0;++i<=split($0,a,"");){s=a[i]
O=O (L?tolower(s):toupper(s))
L=1
if(index("-. /&#",s))L=0}print O}

如果可以利用将记录自动拆分为字段并修改所述字段的优势,那将是很好的选择,但随后我们将失去字段分隔符。:(

我知道这不是答案最复杂的问题,这是一个相当老的问题,但是我认为AWK在CG的答案空间中的代表性不足:)

(感谢@manatwork测试代码,它现在应该可以工作了:)还更改了流程,但通过用;换行符替换字节数来保持字节数不变。)


1
你确定吗?代码中没有一个似乎产生所需的输出既不与gawkmawkoriginal-awk。(在Ubuntu上测试。)
manatwork'Mar 30'16

它是使用gawkRHEL6盒编写的,但随后被转录为Windows盒。很可能存在转录问题。当我可以在同一台计算机上进行测试和发布时,我将在工作后尝试进行测试。 l=0应该是L=0
Robert Benson

希望它现在可以工作,@manatwork。感谢您的测试。:)
罗伯特·本森

1
现在似乎可以正常工作。未检查所有测试用例,但似乎可以将其减少一些:{for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1
manatwork'Mar

我喜欢您使用change $0并使用1标签来避免使用print命令,这是我从未想到的事情。在以后打高尔夫球时,我必须牢记:)
罗伯特·本森

1

PHP(> v5.4.32)-25个字符

<?=ucwords($a,'-. /&#')?>

说明:

  • ucwords()是内置的PHP函数

  • 第一个参数$a是输入

  • 第二个参数是分度数(在测试用例中发现的非字母字符)

  • 假定由于使用了回送/回显/打印 <?= ?>

链接:


1
嗨,欢迎来到该网站!我认为目前这是默认情况下不允许的代码段,但您可以使用-R以下代码作为完整程序获得41个字节:在线尝试!或使用参数42:在线试用!
Dom Hastings

0

T-SQL,179

DECLARE @T VARCHAR(MAX)='foo',@X VARCHAR(2),@ INT=0WHILE @<LEN(@T)SELECT @X=SUBSTRING(@T,@,2),@+=1,@T=STUFF(@T,@,1,IIF(@X LIKE'[a-Z]_',LOWER(RIGHT(@X,1)),UPPER(RIGHT(@X,1))))PRINT @T

此处尝试使用SQL Server 2012中的SELECT版本。

用输入字符串替换“ foo”。字符计数用于零长度的字符串。该代码使用索引遍历字符串,根据先前的字符在该位置将字符大写或小写。



0

Powershell,77个 75字节

该解决方案完全符合任务规则(甚至是模棱两可的示例foo:bar)。

-join($args|% t*y|%{"$_"|%('ToU*r','ToL*r')[+$l];$l=!('# -./&'|% Co*s $_)})

另请参阅@Iszi中具有内置功能ToTitleCase的Powershell解决方案

解释测试脚本:

$f = {

-join(
$args|% t*y|%{                   # for each char from input string
    "$_"|%('ToU*r','ToL*r')[+$l] # evaluate ToUpper or ToLower method depend on $l (lower) value
                                 # Note the variable $l is not defined for a first char
                                 # so it evaluates toUpper for the first char 
    $l=!('# -./&'|% Co*s $_)     # golfed form for $l=!'# -./&'.Contains($_) expression
                                 # =0 if the current char is specified separator (toUpper for next char)
}                                # =1 otherwise (toLower for next char)
)                                # finally, join all chars to a result string

}

@(
    ,('foo:bar'                                                                 ,'Foo:bar')
    ,('aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe'                                ,'Agent Accept/Length-Type User Range.Type')
    ,('type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe'         ,'Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code')
    ,('cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc'      ,'Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc')
    ,('lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT' ,'Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content')
    ,('contENT/ACcEpT'                                                          ,'Content/Accept')
    ,('BeGin/wITH.tyPE&conTeNt'                                                 ,'Begin/With.Type&Content')
    ,('Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with'       ,'Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With')
    ,('RaNgE&COnTeNT WITh CoNTENT-TypE tyPe'                                    ,'Range&Content With Content-Type Type')
    ,('BEgin COdE#uSeR#aGeNt.USeR'                                              ,'Begin Code#User#Agent.User')
    ,('TypE LENGth'                                                             ,'Type Length')
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($r-ceq$e): $r"
}

输出:

True: Foo:bar
True: Agent Accept/Length-Type User Range.Type
True: Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code
True: Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc
True: Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content
True: Content/Accept
True: Begin/With.Type&Content
True: Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With
True: Range&Content With Content-Type Type
True: Begin Code#User#Agent.User
True: Type Length

0

QBasic,74个字节

1c$=LCASE$(INPUT$(1))
IF f=0THEN c$=UCASE$(c$)
f=c$>"@
?c$;
IF""<c$GOTO 1

字节数在CP-437中进行计数;是一个字节(字符代码20)。

这里的输入方法有点奇怪:一次键入一个字符,然后在显示之前先转换其大写。因此,当您键入时aGeNT,它在屏幕上显示为Agent。击中Enter结束程序。


0

Python 3,122字节

lambda s:''.join(chr(ord(c)+[[0,0],[0,32],[-32,0]][('@'<c<'[')-('`'<c<'{')]['@'<p<'['or'`'<p<'{'])for c,p in zip(s,'-'+s))

在线尝试!

分数不是很高,但是我想在没有内置字符串操作的情况下尝试进行大小写更改。


-2

PHP-23个字符

mb_convert_case($ w,2);

它需要php_mbstring才能工作


1
在我的5.3.26上mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);返回“ Begin / With.type&content”,而不是“ Begin / With.Type&Content”。
manatwork 2013年
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.