Matlab 向字符串添加特定字母

Matlab 向字符串添加特定字母,matlab,str-replace,findstr,strcat,Matlab,Str Replace,Findstr,Strcat,我是一名神经科学/生物医学工程专业的学生,正在为整个MATLAB编程的磨难而挣扎,到目前为止,这个网站是我现在能找到的最好的老师。我目前有一个硬件问题。我需要做的是取一个短语,在其中找到一个特定的单词,然后在其中取一个特定的字母,并将该字母增加所示的数字。换言之: phrase = 'this homework is so hard' word = 'so' letter = 'o' factor = 5 which should give me 'This homework is sooooo

我是一名神经科学/生物医学工程专业的学生,正在为整个MATLAB编程的磨难而挣扎,到目前为止,这个网站是我现在能找到的最好的老师。我目前有一个硬件问题。我需要做的是取一个短语,在其中找到一个特定的单词,然后在其中取一个特定的字母,并将该字母增加所示的数字。换言之:

phrase = 'this homework is so hard'
word = 'so'
letter = 'o'
factor = 5
which should give me 'This homework is sooooo hard'
我摆脱了我的主要错误,虽然我真的不知道;我不知道怎么做。我退出了MATLAB,然后又回到了MATLAB。瞧,它神奇地工作了

function[out1] = textStretch(phrase, word, letter, stretch)
searchword= strfind(phrase, word);
searchletter strfind(hotdog, letter); %Looks for the letter in the word
add = (letter+stretch) %I was hoping this would take the letter and add to it, but that's not what it does 
replace= strrep(phrase, word, add) %This would theoretically take the phrase, find the word and put in the new letter
out1 = replace

根据老师的说法,one()函数可能很有用,我必须连接字符串,但是如果我能在字符串中找到它并替换它,为什么我需要连接?

既然这是家庭作业,我不会为你写全部内容,但是你使用
strfind
的方法是正确的

a = strfind(phrase, word); 
b = strfind(word, letter); 
短语(1:a)
返回什么?
短语(a+b:end)
返回什么

做出一些假设,说明老师为什么要你使用
one

num=double('o')
返回什么?
char(num)
返回什么?怎么样
char([num-num])

可以像这样连接字符串:

out = [phrase(1:a),'ooooo',phrase(a+b:end)];
所以你真正需要关注的是如何得到一个字符串,它是重复的

如果您想改用
strrep
,则需要为其提供您正在搜索的完整单词以及该单词的副本,其中包含以下重复字母:

 new_phrase = strrep(phrase, 'so', 'sooooo');

同样,问题是如何获取“sooooo”字符串。

看看这是否适合您-

phrase_split = regexp(phrase,'\s','Split'); %// Split into words as cells
wordr = cellstr(strrep(word,letter,letter(:,ones(1,factor))));%// Stretched word
phrase_split(strcmp(phrase_split,word)) = wordr;%//Put stretched word into place
out = strjoin(phrase_split) %// %// Output as the string cells joined together
注:strjoin需要一个最新的MATLAB版本,如果不可用,可以从以下网站获得

或者你可以使用从m文件本身获得的黑客攻击-

out = [repmat(sprintf(['%s', ' '], phrase_split{1:end-1}), ...
             1, ~isscalar(phrase_split)), sprintf('%s', phrase_split{end})]
样本运行-

phrase =
this homework is so hard and so boring
word =
so
letter =
o
factor =
     5
out =
this homework is sooooo hard and sooooo boring
因此,只需像这样将代码包装到函数包装器中-

function out = textStretch(phrase, word, letter, factor)

作业编辑:

phrase = 'this homework is seriously hard'
word = 'seriously'
letter = 'r'
stretch = 6

out = phrase
stretched_word = letter(:,ones(1,stretch))

hotdog = strfind(phrase, word)
hotdog_st = strfind(word,letter)
start_ind = hotdog+hotdog_st-1
out(start_ind+stretch:end+stretch-1) = out(start_ind+1:end)
out(hotdog+hotdog_st-1:hotdog+hotdog_st-1+stretch-1) = stretched_word
输出-

out =
this homework is serrrrrriously hard
同样,使用此语法转换为函数-

function out = textStretch(phrase, word, letter, stretch)

杰西卡,首先这是错误的,但我不是来给你答案的。你能这样用吗?这肯定会发生

function main_script()
phrase = 'this homework is so hard';
word = 'so';
letter = 'o';
factor = 5;
[flirty] = textStretchNEW(phrase, word, letter, factor)
end

function [flirty] = textStretchNEW(phrase, word, letter, stretch)
hotdog = strfind(phrase, word);
colddog = strfind(hotdog, letter);
add = letter + stretch;
hug = strrep(phrase, word, add);
flirty = hug
end

你有MATLAB路径上的函数吗?还是内置的主功能?如果没有,这就是为什么你有“未定义的函数‘textstrench’for(…)”的原因。你的代码显然不能工作——你不能给strrep一个字母和数字,并期望它知道重复字母五次——这是“字符串替换”而不是“字符串重复”。您还调用了
strfind
两次,然后对输出不做任何操作。我的建议是先弄清楚如何以单词('so')、字母('o')和数字(5)开头,然后把“sooooo”去掉。一旦你这样做了,你就可以使用strrep了。它和我所有的其他代码都在同一个地方,所以我不知道为什么它现在给了我一个问题。如前所述,它在任何情况下都不会工作。但这不应该是出现错误的原因。确保您位于定义此函数的路径上,或者添加了此函数路径(例如addpath(函数路径)@JessicaMarie我强烈建议你重新考虑你的变量名,做一些更有意义的事情!我认为总的想法是让她可以做家庭作业,但这是一种方法it@ASantosRibeiro很难在什么是帮助和什么是解决方案之间划清界限。但我明白你的意思,只是不知道该停在哪里:)还有,至少OP是诚实的,并展示了它的工作!我仍然需要弄清楚为什么我不能运行我的代码,所以我不知道这是否有效,但我更愿意使用我有一些实际经验的技术。我还没有学会cellstr,或者短语_split,虽然我在技术上了解regex,但我对它了解得还不够。因此,虽然我确信这段代码是正确的,但我并不完全习惯于使用它,但这里有一个衷心的感谢@JessicaMarie查看衷心的编辑!没有单元格或单元格数组,但保留您所说的
单元格或单元格数组可能是他们想要的。另外,请记住,这只是为了替换第一个这样的词,但你可以修改它,使其适用于多个匹配项。当然,这是可行的:)现在我不打算完全使用它(这样做一点也不舒服),但它给了我一些东西。你很高兴,但我相信我能跟上。我同意输出语句。当你的老师用字符串做的最多的事情是把它们打出来,模糊地告诉你它们做了什么,然后继续或谈论即将到来的足球比赛时,这是很困难的。这是一个自学课程短语(1:a)应该给我我想要的单词。短语(a+b:end)应该给我一个词和一封信。num=double('o')应该给我'o'吗?char(num)使其成为一个字符。char([num])使其成为一个数组?助教暗示STREP将是解决这一问题的正确方式。我仍然不确定这些的作用在哪里。除非那必须处理我的因素。没有关于
短语的索引。再次阅读
strfind
上的文档,或在命令行上尝试。在
double
上没有-再次阅读
double
/
char
上的文档<当你试图构造一个任意大小的字符数组(基于“因子”)时,会出现code>ones
。Double和char就像MATLAB的不同触发器。我想,字符是用来表示字符串的。所以我会用带因子的。好吧,它不跑了。我检查了我的路径,我改变了两次路径。“它跑不动了。”我贴的那个杰西卡玛丽?将此复制到新文件。保存它并将其命名为main_script.m。然后使用F5“>>main_script Undefined函数'textstract'为'char'类型的输入参数运行它。“您刚刚将它粘贴到命令行了吗?或者你用这个创建了一个文件并运行了吗?好的,你现在可能有一些合并函数了。根据我编辑到t中的内容更改您的文件