让我用一个例子来详细解释我的问题。
给出一个字符串:
“Assonance是一开始就重复同样的元音 几个连续的词“
如果我们想将第四个单词重复移动到第二个单词的位置,则该字符串将变为:
“Assonance重复是一开始就有同样的元音 几个连续的词“
给定C
函数原型如下:
void move(char *s, int word_begin_ind, int word_end_ind, int target_begin_ind)
如何实现此功能来完成这项工作?
在上面的示例中,word_begin_ind = 17, word_end_ind = 27, target_begin_ind = 10
这不是作业 。实际上这是一个面试问题。我有一个算法。基本思路如下:
(1)使用word_begin_ind
和word_end_ind
制作目标词的副本。
(2)从target_begin_ind
到word_begin_ind - 1
,将每个角色移动到正确的位置。例如,将word_begin_ind-1
移至'word_end_ind',将word_begin_ind-2
移至'word_end_ind-1',依此类推。
(3)最后,将副本移动到正确的位置(从target_begin_ind开始)。
我希望每个人都能理解我的要求。
您无需使用c来完成此项工作。 C ++也很受欢迎。
任何人都可以帮我找到其他解决方案吗?
答案 0 :(得分:8)
在一个位置的开头和另一个位置的结束之间取一个范围:
"Assonance [is the reiteration] of the same vowel sound at the beginning of several consecutive words"
反转此范围:
"Assonance [noitaretier eht si] of the same vowel sound at the beginning of several consecutive words"
将此范围拆分为单词和其他所有内容:
"Assonance [noitaretier|eht si] of the same vowel sound at the beginning of several consecutive words"
反向词:
"Assonance [reiteration|eht si] of the same vowel sound at the beginning of several consecutive words"
反转一切 - 其他:
"Assonance [reiteration|is the] of the same vowel sound at the beginning of several consecutive words"
所以你已经完成了。
答案 1 :(得分:0)
我会这样解决:
char * temp = malloc(end-begin);
memcpy(temp,s,end-begin);
现在我们知道在目标位置必须留出一些空间来重新放入单词,所以我想要来回移动目标位置的n个字节,具体取决于原始单词是在之前还是之后目标位置,应该使用 memmove 完成,然后只需 memcpy 目标位置的单词