我必须在用户输入的字符串中一次移动一个字符。 在每次迭代时,程序循环移动字符从当前位置向右移动。那是第一个字符移到第二个位置,第二个字符移到第三个位置,依此类推。最后一个角色被移到第一位。移动字符后,程序还必须在每次迭代中打印新字符串。迭代将继续,直到原始字符串返回。
例如,用户输入字符串:' 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]);
}
答案 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");
}
}
希望这有助于您理解解决方案背后的逻辑。