我需要一個僅交換單詞中間字符(在第一個字符和最後一個字符之間)的函數。如果單詞由少於4個字符組成,該函數不應該改變任何內容。該函數有一個名爲exclude
的參數,它是一個單詞末尾的潛在標點符號的矢量。只交換單詞中間字母的順序,並保留標點符號的順序(如果有的話)
您可以假設只有一個可能的標點符號。如果存在這樣的標記,則不應該改變它,並且不要計算實際單詞組成的字符數量。
我的想法是
- 排除任何標點符號
- 取出單詞的第一個字母
- 取出字的最後一個字母
- 交換其餘字母
- 加回第一個和最後一個字母和標點符號
string <-c("well!")
interchange.middle.of.word <- function(string, exclude = c(",",".","!","?")){
result1 <- strsplit(string, split= "")
result2 <- unlist(result1)
result3 <- result2[ - which(result2 %in% exclude)]
result4 <- head(result3,-1)
result5 <- tail(result4,-1)
result6 <- sample(result5,replace = FALSE)
result7 <- c(result3[1],result6)
result8 <- c(result7, result4[length(result4)])
result9 <- c(result8, result2[which(result2 %in% exclude)])
result10 <- paste(result9,collapse="")
return(result10)
}
代碼就職於例如'well!'
,而不是另一個例子像'hello?'
或字小於3個字母像'Tes'
:
- 爲
'hello?'
我的結果是 - 爲
'Tes'
我的結果是'NA'
如果有人能告訴我我的代碼出錯了,我將不勝感激。 非常感謝。
你用了「交換」來形容的要求,但在你的代碼中被調用' sample()'which *隨機化*中間字符的順序。我對「交換」一詞的本能解釋是,你的意思是顛倒中間字符的順序。你能澄清一下你是否要*倒置*或*隨機化*中間字符? – bgoldst
感謝您的評論。要求是隨機改變中間字母的順序。例如「好!」結果應該是兩個:「好!」和「wlel!「 – LoveVegas