#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)
请解释
答案 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;
}