我试图编写一个获取字符串和数字的程序,并计算它的长度并将所有元素移位。
我有2个错误:
1.assignment从没有强制转换的整数中生成指针
2.assignment在没有强制转换的情况下从指针生成整数。
#include <stdio.h>
#include <string.h>
#define N 10
int myStrlen(char*);
void shiftRight(char*, int);
int main() {
char str[N] = {0};
int num = 0;
int len;
/* input of the string */
scanf("%s",str);
scanf("%d",&num);
len=myStrlen(str);
if(num>=0) {
shiftRight(str, num);
printf("%s\n",str);
}
else
{
printf("%s\n", str);
}
return 0;
}
int myStrlen(char*str)
{
int my_len=0;
while (str[my_len] != '\0')
{
my_len++;
}
return my_len;
}
void shiftRight(char* str, int num)
{
int i;
char* j;
int count;
j=(str[N-1]);
for(count=0;count<num;count++)
{
for(i=N-1;i>0;--i)
{
str[i]=str[i-1];
}
str[0]=j;
}
}
欢迎您的回答,如果您对此代码有任何不妥之处,请提及。
答案 0 :(得分:0)
正如你的编译器告诉你的那样,没有强制转换的整数指针位于
j=(str[N-1]);
指针的整数位于
str[0]=j;
您应该将j声明为char j;
答案 1 :(得分:0)
但是现在当我运行它时,键入让我们将球称为字符串并将其称为1 作为一个数字,我从程序中得不到任何东西,而不是得到&#34; lbal&#34;
你拥有所有正确的元素,但这还不够。编写一个程序讲述一个故事,你需要设置场景,描述一路上发生的事情并完成你的叙述。一个故障元素的故事是无意义的,就像一个程序一样。
您的代码的具体问题:您保存最后一个字符(将其恢复到字符串的开头)是错误的地方;当你应该使用它的长度时你是否正在使用字符串的分配(并且方便地,你有一个功能!);这实际上更像是轮换而非轮班;使用最具描述性的变量名称,而不是最短的变量名称;选择一种缩进样式并坚持下去 - 它可以在您编写的程序之间进行更改,但不应在单个程序中进行更改。
以下是针对上述一些问题的代码修改:
#include <stdio.h>
#define STRING_SIZE 10
int myStrlen(char *string)
{
int length = 0;
while (string[length] != '\0')
{
length++;
}
return length;
}
void rotateRight(char *string, int number)
{
int length = myStrlen(string);
for (int count = 0; count < number; count++)
{
char j = string[length - 1];
for (int i = length - 1; i > 0; i--)
{
string[i] = string[i - 1];
}
string[0] = j;
}
}
int main()
{
char string[STRING_SIZE] = {0};
int number = 0;
/* input of the string */
scanf("%s", string);
scanf("%d", &number);
if (number > 0)
{
rotateRight(string, number);
printf("%s\n", string);
}
else
{
printf("%s\n", string);
}
return 0;
}
<强>输出强>
% ./a.out
elephant
3
anteleph
%