使用C将字符串中每个字符的位置从它的当前位置向右移动到它的右边

时间:2015-12-27 16:04:18

标签: c string reverse

我必须在用户输入的字符串中一次移动一个字符。 在每次迭代时,程序循环移动字符从当前位置向右移动。那是第一个字符移到第二个位置,第二个字符移到第三个位置,依此类推。最后一个角色被移到第一位。移动字符后,程序还必须在每次迭代中打印新字符串。迭代将继续,直到原始字符串返回。

例如,用户输入字符串:' cat'

首次迭代后,字符串为:' tca'

第二次迭代后,字符串为:' atc'

和第三次迭代:' cat' (与程序完成相同)

我写了一个反转整个字符串的代码。但是,我真的不知道如何一次移动一个角色。代码如下所示:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

main ()
{
    char  word[20];
    printf("enter word:");
    int d,i;
    scanf("%s",&word);
    d = strlen(word);

    for(i=d-1; i >= 0; i--)
        printf("%c",word[i]);
}

2 个答案:

答案 0 :(得分:1)

声明一个var j并用这个替换你的for循环:

Page1

Record1                                      Record2
..............................               ...........................
..............................               ...........................
..............................               ...........................
..............................               ...........................

Page2

Record3                                      Record4
..............................               ...........................
..............................               ...........................
..............................               ...........................
..............................               ...........................

答案 1 :(得分:1)

可能的解决方案:

从示例输出中,您似乎需要像circular array一样访问字符串。在这种情况下,您可能需要每次从index(size - move_number)迭代字符串,然后通过像循环数组一样访问它们来打印索引。

更新代码:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

void main()

{
    char  word[20];
    printf("enter word:");
    int d, i;
    scanf("%s", &word);
    d = strlen(word);

    for (i = d - 1; i >= 0; i--) 
    {
        int j = i;
        do
        {
            printf("%c", word[j]);   //Printing each index
            j = (j + 1) % d;        //computing the next index to print
        }
        while (j != i);             //Condition which determines that whole string is traversed
        printf("\n");
    }
}

希望这有助于您理解解决方案背后的逻辑。