문자열을 대문자로


18

문자열이 있으면 대문자를 사용하십시오. 대문자로 conTeNT-lENgth변경하면으로 변경됩니다 Content-Length. 이 예에서는 -단어 경계로 2 단어가있는 문자열을 보여주었습니다 . 그러나 단일 문자로 구분 된 단어 수를 경계로하는 문자열 코드를 작성해야합니다 . 이 경계는 문자열에서 변경 될 수 있습니다.

정황

  1. 사용 regular expressions허용되지 않습니다 .
  2. 문장 (문자열)에 단어가 몇 개나있을 수 있습니다.
  3. 각 단어는 모든 경우 의 English문자 로 구성됩니다 [a-zA-Z].
  4. 문장에서 다른 단어는 단일 문자로 구분됩니다. 이 문자는 것이다 단지 중 하나 일 수 -, ., <space-character>, /, &, #. 문장 에 언급 된 문자 이외의 다른 문자가 포함 되지 않는다고 안전하게 가정 할 수 있습니다.
  5. 출력에서 단어 경계가 유지되어야합니다.
  6. 가장 짧은 코드가 승리합니다.

예를 들어 프로그램이에 대해 출력해야 Begin/With.Type&Content합니다 BeGin/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
당신이 대문자로 부르는 것은 실제로 낙타 사건으로의 전환입니다.
Pierre Arlaud

6
@ArlaudPierre 아니오, "테스트 케이스"로 제공되는 것은 낙타 케이스와 비슷합니다. 대문자로 불리는 것은 Title Case에 더 가깝습니다.
Iszi

테스트 사례에 대한 예상 결과를 제공 할 수 있습니까? 일부 내장 함수는 모든 대문자 단어 ( /CC/2 행 또는 -AND&7 행)를 단독으로 남겨 두어야한다고 가정 할 수 있습니다. 이 도전에 대해 괜찮습니까?
Iszi

입력은 항상 단어로 시작합니까 아니면 구분자로 시작합니까?
lebatsnok

답변:


7

GolfScript, 36 27 19 자

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

사양에 따라 모든 입력에 작동하는 매우 기본적인 GolfScript 접근 방식입니다. 예제는 온라인 으로 테스트 할 수 있습니다 .


멋있는. 내 솔루션이 전문가 솔루션보다 두 배 이상인지 궁금합니다. :) 그러나 나는 당신이 하루가 끝나기 전에 이것을 여러 번 단축 할 것이라고 확신합니다.
manatwork

@manatwork 이제 우리는 두 가지 요소가 있습니다 ;-) 여전히 모든 스왑에 만족하지 않습니다.
Howard

나는 당신이 나를 실망시키지 않을 것을 알았습니다.
manatwork

22

파이썬 3,22

print(input().title())

이 코드는 stdin에서 입력으로 문자열을 가져오고 stdout에 대문자 출력을 제공합니다.

예를 들면 다음과 같습니다.

입력:

BEGIN/wITH.tyPe&cOnTENt

출력 :

Begin/With.Type&Content

다음 코드는 다중 라인 입력 용입니다 (필요한 경우).

파이썬 3, 46

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

while 1:print(input.title())마지막 코드 조각과 동등한 길이입니다.
Ramchandra Apte

1
@RamchandraApte 나는 그것이 허용되는지 확실하지 않습니다. 코드가 EOF
Wasi

1
골프에 대한 일반적인 합의는 출력이 정확하기 만하면 오류는 중요하지 않다는 것입니다.
변동성

댕; 이 질문을 보자 마자 나는 이것을 생각했지만 당신은 나를 이겼습니다. +1
저스틴

+1 나는 외설물처럼 보이지 않기 때문에 골프 스크립트보다 더 좋습니다.
Tim Seguine

6

매스 매 티카 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

{ "에이전트 수락 / 길이 유형 사용자 Range.Type",
"유형 & 에이전트 / Cc / 컨텐츠 길이 # Accept / Agent.Range-Cc / 컨텐츠 / 코드", "Cc / Responce.Length # Type-With & User / Begin & User.Agent & Begin / 수락 / 참조 ","길이 # User.Type / Begin & Length 유형 / 수락 # Range / Code & And-Accept / Content ","Content / Accept ",
"Begin / With.Type & Content ",
"Code.Cc # User.Length-User -And & Type Type & Length.Type User.User & With ",
"컨텐츠 유형 유형의 범위 및 컨텐츠 ",
"시작 코드 # User # Agent.User ",
"유형 길이 "}


-1 기본적으로 정규식입니다.
CalculatorFeline

Mathematica는 정규식을 직접 실행할 수 있지만 다른 것을 사용했습니다. 정규식과 비슷하지만 정규식이 아닙니다.
DavidC

%% %%% % %%
CalculatorFeline

6

자바 스크립트 (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되고 다음 문자에서 호출해야하는 함수의 이름으로 표시됩니다. ucfirstlcfirst입력과 동일한 동작을 가지고 짧은 strtolower/ strtoupper하나의 문자열에 있습니다. 또한 한 글자 만 다르므로 상태를 저장하는 데 효율적으로 사용할 수 있습니다. 원래 버전은 부울에 명시 적으로 상태를 저장해야했습니다.

echo는 boolean false에 대해 아무것도 인쇄하지 않기 때문에 쉼표와 !연산자를 사용 하여 echo 문에서 할당 (이 경우에는 진실 임)을 "숨기기"위해 사용했습니다 . 이를 통해를 제거하여 캐릭터를 저장할 수있었습니다 {}.


인라인 코드 대신 코드 블록 마크 업을 사용하십시오. 따라서 Code Golf UserScript Enhancement Pack 과 같은 스크립트는 코드 아래에 크기를 삽입 할 수 있습니다. 그건 그렇고, 코드에서 3 개의 공백 문자를 모두 제거 할 수 있습니다.
manatwork

대신 $b=ord($c)>64;시도 $b=$c>"@";. 또는 $b=$c>=A;경고 – AFAIR는 경고를 던지지 만 좋은 코딩 관행은 여기에 미덕이 아닙니다.
manatwork

@manatwork 감사합니다, 그것을 생각하지 않았습니다. 어쨌든 설정되지 않은 변수 사용에 대한 경고가 이미 발생했습니다.
Tim Seguine

흠… $ b를 플래그로 사용하지 않고 실제 함수 이름을 저장하는 것은 어떻습니까? $b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}.
manatwork

트윗 담아 가기 나는 그 기능으로 그것을하는 방법을 생각하려고했습니다. 내 시도는 모두 더 컸다.
Tim Seguine

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. (을 선호 SIGINT합니다 EOF.)


4

파워 쉘 : 37-43

입력 방법에 따라 ...

사용자에게 입력하라는 메시지를 표시합니다. 43

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

파이프 라인에서 입력 받기 : 38

(Culture).TextInfo.ToTitleCase($input)

스크립트를 실행할 때 입력을 인수로 제공하십시오.

(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

@Mormegil 어느 쪽? 적어도 읽기 호스트 버전은 저에게 잘 작동합니다. 질문의 모든 테스트 사례에 대해 테스트했으며 질문에 의견을 게시 한 특수 사례를 제외하고 모두 예상대로 반환되었습니다.
Iszi

:(콜론) 규칙 # 4 단어 분리기로 등록되지 않고, 따라서, AFAICS이 foo:bar초래한다 Foo:bar, 없다 Foo:Bar . 그러나 그것은 단지 사양을 읽은 것입니다.
Mormegil

2
@ Mormegil 글쎄, 이것은 깔끔합니다. 이 모호성을 해결하기 위해 사양이 조정되었지만 동시에이 답변은 무효화되지 않은 것 같습니다.
Iszi

1
당신은 대체 할 수 get-cultureculture; codegolf.stackexchange.com/a/778/1308
Danko Durbić

4

자바-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

@SvenHohenstein 정말 감사합니다!
plannapus

또 하나 : 당신은 대체 할 수 TRUE와 함께 T.
Sven Hohenstein

원래 나는 tolower나중에했다.
plannapus

OK, 여기에 또 다른 하나 ;-) 당신은 대체 할 수 mapply(substr,tolower(x),n,n) 와 함께 strsplit(tolower(x),"")[[1]]하나 개의 문자를 저장합니다.
Sven Hohenstein

3

비 펀지 (98) - (24) (45)

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

이것을 쓰면 뇌가 아프다.

이것은 입력을 ~받고 이전 문자가 구분 기호 중 하나이거나 이전 문자가 없으면 실행됩니다.

:'``!3*j' -;

이 스 니펫은 문자를 가져오고 해당 ASCII 값이 크거나 같으면 a32를 빼서 대문자로 변경합니다. 그것보다 작은 경우 a, 3*j조정을 건너 뜁니다. 이후에는 다음 부분을 건너 뜁니다. 이 부분은 대문자에서 소문자로의 변경을 처리합니다 (다음 부분과 병합 될 수 있다고 확신합니다. 어떻게되는지 잘 모르겠습니다).

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

문자가 인쇄 된 ,다음 ( ) 문자가 경계 중 하나인지 확인합니다.

'/`!

기본적으로 문자를 ascii 값과 비교합니다 /. 문자가 경계가 아닌 경우 코드는 12다음 번에 대문자 조정을 건너 뛰도록 푸시 합니다. #종료 프로그램 :을 건너 뛰고 @입력 끝에 도달 ~하면 코드 실행을으로 다시 보내 @프로그램을 종료합니다.


3

루비 : 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하지 않습니까? 최소한이 작업에 허용 된 입력에 대해.
Howard

예. 배트맨은 다른 세퍼레이터가 더 이상 필요하지 않다고 강조했다. 감사합니다, @Howard.
manatwork

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

( 자본 x은 어디에 있습니까 string)

물론 지루하고 싶다면 (사양이 업데이트 된 후)

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 #은 스크립팅 언어가 아니기 때문에 컴파일하지 않으며 클래스에서 이것을 캡슐화해야합니다.
Pierre Arlaud

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

1
당신은을 줄일 수 publicstring[]a상용구에서
Johnbot

네, 맞습니다 public. 그러나 제가 처리하는
것이기

2

자바 스크립트 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

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

베 펀지 -98 (29), C (65)

방법 / 알고리즘은 거의 동일하기 때문에 두 버전을 같은 게시물에 포함시킵니다. 둘 다 문자의 소문자인지 아닌지를 알기 위해 마지막 문자가 기호인지 문자인지를 추적합니다.

베 펀지 -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()]

VBscript

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

사용법에 대한 도움을 줄 수 있습니까? “컴파일 오류 : 외부 이름이 정의되지 않았습니다”라는 메시지가 나타납니다. (개발자 탭의 Word 2013에서 Visual Basic을 클릭 한 다음 Visual Basic for Application에서 직접 실행 창에 코드를 복사하여 붙여 넣은 다음 Enter 키를 누릅니다.)
manatwork

@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}

이것은 한 줄 내용에는 잘 작동하지만 여러 줄 입력에는 몇 가지 내용을 추가해야합니다.

{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
확실합니까? 코드 중 어느 것도 아니하여 필요한 출력을 것 같다 gawk, mawk또는 original-awk. (우분투에서 테스트했습니다.)
manatwork 7

gawkRHEL6 상자를 사용하여 작성 되었지만 창 상자로 전사되었습니다. 전사 문제가있을 수 있습니다. 같은 컴퓨터에서 테스트하고 게시 할 수있을 때 퇴근 후 테스트를 시도합니다. 어쨌든 문제가있는 것 같습니다. l=0해야L=0
로버트 벤슨

잘만되면 이제 @manatwork 작동합니다. 테스트 해 주셔서 감사합니다. :)
Robert Benson

1
이제 제대로 작동하는 것 같습니다. 모든 테스트 사례를 확인하지는 않았지만 조금 줄일 수 있습니다 {for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1.
manatwork

나는 당신의 변화 사용을 좋아합니다 $0명령 1을 피하기 위해 레이블을 하고 레이블을print 것이 마음에 들지 않습니다. 나는 미래의 골프를 위해 그것을 명심해야 할 것이다 :)
Robert Benson

1

PHP (> v5.4.32)-25 자

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

설명:

  • ucwords ()는 내장 PHP 함수입니다

  • 첫 번째 매개 변수 $a는 입력입니다

  • 두 번째 매개 변수는 델리 미터입니다 (테스트 사례에서 비 알파벳 채팅이 발견됨)

  • 반품 / 에코 / 인쇄는 <?= ?>

연결:


1
안녕하세요. 사이트에 오신 것을 환영합니다! 나는 이것이 기본적으로 허용되지 않는 스 니펫이라고 생각하지만 다음을 사용하여 전체 프로그램으로 41 바이트를 얻을 수 있습니다 -R: 온라인 사용해보십시오! 또는 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 인 문자열입니다. 이 코드는 색인을 사용하여 문자열을 순회하며 이전 문자를 기준으로 해당 위치에서 문자를 대문자 또는 소문자로 변환합니다.



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

Q 기본, 74 바이트

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

바이트는 CP-437 에서 계산됩니다 . 1 바이트 (문자 코드 20)입니다.

여기의 입력 방법은 약간 이상합니다. 문자는 한 번에 하나씩 입력되고 대문자가 표시되기 전에 변환됩니다. 를 입력하면 aGeNT화면에이 (가)로 나타납니다 Agent. 타격 Enter은 프로그램을 종료합니다.



-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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.