2017-03-05 76 views
1

這是任務:如何用R中的一個X包圍一個字符串?

編寫打印出盒裝句子如下功能:

s<-"This is a sentence with different word lengths" 

盒(一個或多個)打印下面的」

XXXXXXXXXXXXX 
X this X 
X is  X 
X  a  X 
X sentence X 
X with X 
X different X 
X word X 
X lengths X 
XXXXXXXXXXXXX 

訣竅是,每單詞應該在X的框內居中 X的頂部和底部字符串的長度應該是4 加上最長單詞的長度右邊的所有X都應該排隊。沒有引號。

要開始,我寫了這行:

s<-cat("This","is","a","sentence","with","different","word","lengths",sep=" ",fill=2) 

包裝了文本,以便有每行一個單詞。我不知道如何讓X在包裝的字符串周圍形成一個框。我認爲我應該使用nchar(s),但我不確定它是如何有用的。任何幫助,將不勝感激!

+0

這似乎真的不完整的,有些困惑。 cat函數返回NULL,因此執行第二個賦值是沒有意義的。 –

+0

我不知道如何包裝字符串,以便每行有一個字。我對R很新,剛開始上這門課。你有其他建議嗎? @ 42 – maddiemoore2729

+0

'cat(paste(strsplit(s,「」)[[1]],「\ n」))'。當你開始做家庭作業時,一定要對Vida Wang給予適當的獎勵。 –

回答

3

您可以先計算在句子中最大單詞的長度,則「X」max_word_length + 4
而空間應分成兩個側面。

s<-"This is a sentence with different word lengths" 
library(stringr) 
surround_x <- function(string){ 
    word_vec <- str_split(string, pattern = " ")[[1]] 
    max_length <- max(nchar(word_vec)) 
    cat(str_c(rep("X", max_length + 4), collapse = ""),"\n") 
    for(i in word_vec){ 
    space_num <- max_length + 2 - nchar(i) 
    start_space_num <- floor(space_num/2) 
    end_space_num <- space_num - start_space_num 
    string <- str_c(c("X", rep(" ", start_space_num), i ,rep(" ", end_space_num), "X"), collapse = "") 
    cat(string, "\n") 
    } 
    cat(str_c(rep("X", max_length + 4), collapse = ""),"\n") 
} 

結果是:

> surround_x(s) 
XXXXXXXXXXXXX 
X This X 
X is  X 
X  a  X 
X sentence X 
X with X 
X different X 
X word X 
X lengths X 
XXXXXXXXXXXXX 
+0

不錯的功能。它也適用於各種句子。 –

+0

這個工程!非常感謝! – maddiemoore2729

相關問題