2017-03-05 78 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

相关问题