字符串旋转

时间:2010-08-17 16:34:23

标签: c string

#include <stdio.h>
#include <string.h>
int main()
{
    char s[15];
    int i,j,n,*str;

    printf("Enter a string");
    scanf("%s",str);
    n=strlen(str);

    for(i=0;i<n;i++)
    {
        str[n]=str[0];

        for(j=0;j<n;j++)
        {
            str[j]=str[j+1];
        }
        str[n]='\0';
        printf("\n %s",str);
    }
    return 0;
}

这个程序给了我所有可能的字符串旋转

任何人都可以解释str[n]=str[0]str[j]=str[j+1]的含义 我们可以使用n=strlen(s)代替n=strlen(str) 请解释

3 个答案:

答案 0 :(得分:3)

这会旋转字符串。它的方式是通过执行str[n] = str[0]将第一个字符移动到最后一个位置(str[n]是字符串终止的空字符'\0',然后将整个字符串向下移动一个({ {1}}),然后在结尾处替换null(str[j] = str[j+1])。

如果该代码使用str[n]='\0',则该代码将导致缓冲区溢出,如果该字符串超过14个字符。但是,代码中也存在逻辑错误:它应该是初始化s(作为str而不是char*)或扫描到具有长度限制的int*。例如:

s

scanf("%14s", s);

答案 1 :(得分:0)

  

而不是n=strlen(s)我们可以使用n=strlen(str)

实际上,由于str是int指针,未在任何地方初始化,str的所有用法都应该被s取代(它可能只是一个错字)。

答案 2 :(得分:0)

#include <stdio.h>
#include <string.h>
int main()
{
    char s[15];
    char tmp_var;
    int i,j,n,*str;

    printf("Enter a string");
    scanf("%s",str);
    n=strlen(str);

    for(i=0;i<n/2;i++)
    {
        tmp_var  = str[i];
        str[i]   = str[n-i];
        str[n-i] = tmp_var;
    }
    printf("\n Rotated String is %s \n",str);
    return 0;
}