Take first letter of each word, leave spaces and punctuation
CJam, 13 bytes
r{(\'A,f&Sr}h
Works if I can consider only the common punctuation characters, and the output can have trailing spaces. (Thanks to Dennis.)
This question needs much more clarification...
CJam, 17 16 bytes
r{(\eu_elf&Sr}h&
Try it online.
Explanation
r e# Read one word from input.
{ e# While it is not EOF:
(\ e# Extract the first character.
eu e# Convert the rest to uppercase.
_el e# And lowercase.
f& e# Delete characters in the first string if not in the second string.
S e# Append a space.
r e# Read the next word.
}h
& e# Discard the last space by intersecting with empty string.
Pyth, 14 bytes
jdm+hd-rtd0Gcz
Try it online: Demonstration
Explanation:
implicit: z = input string
cz split z by spaces
m map each word d to:
hd first letter of d
+ +
rtd0 (lowercase of d[1:]
- G but remove all chars of "abc...xyz")
jd join resulting list by spaces and print
Python 3.4, 94 92 82 77 bytes
print(*[w[0]+''.join(c[c.isalpha():]for c in w[1:])for w in input().split()])
I'm new to code golfing but I thought I'd give it a try! This one's not a winner, but it was fun.
This just splits the string, taking the first character of each word along with any punctuation in the rest of the word.
*edited with changes by FryAmTheEggman, DLosc