2017-03-05 2 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 と最長の単語の長さを加えたものにする必要があります。 uld引用符なし。各行に1つの単語があるようにテキストをラップ

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

:開始するには

は、私はこの行を書きました。私はラップされた文字列の周りにボックスを形成するXを取得する方法がわかりません。私はnchar(s)を使うべきだと思いますが、どのように役立つのか分かりません。どんな助けもありがとう!

+0

これは本当に不完全とやや混乱しているようです。 cat関数はNULLを戻すので、2番目の代入を実行する意味がありません。 –

+0

各行に1つの単語があるように、文字列をどのようにラップするかわかりません。私は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

関連する問題