如何将字符串中的字符向右移动?例如,我想移动"Hello"向右3次。结束信从开头开始。所以输出应该是"lloHe"
我试着用指针来做。但输出只是"k"。这个程序只取";h"从hello开始,从字母表中向右移动3位数字。但那不是我想要做的。你能给我一些建议吗?
#include <stdio.h>
int main () {
int a[5] = {'h','e','l', 'l','o',' '};
char i;
char ptr;
ptr = a;
printf ("%cn",ptr+3);
return 0;
}
您实际上想要操作数据,还是只想生成输出?你可以这样做:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
char a[] = {'h', 'e', 'l', 'l', 'o', ' '}; /* Note the [], and the type */
char i;
char *ptr; /* Note the '*'; ptr is a pointer */
ptr = a;
int shift = argc > 1 ? strtol(argv[1], NULL, 10) : 3;
shift %= sizeof(a);
printf("%s", ptr + shift); /* Note the %s */
fwrite(a, 1, shift, stdout);
putchar('n');
return 0;
}
通常,初始化将写为char a[] = "hello";
,如果您将a
设置为int数组,则不能使用printf
进行输出。如果出于某种原因需要a
为整型,您可以这样做:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
int a[] = {'h','e','l', 'l','o',' '};
int shift = argc > 1 ? strtol(argv[1], NULL, 10) : 3;
shift %= sizeof a / sizeof *a;
int *ptr = a + shift;
/* Print the tail of the string */
while( ptr < a + sizeof a / sizeof *a ){
putchar(*ptr++);
}
/* Print the head of the string */
ptr = a;
while( ptr < a + shift ){
putchar(*ptr++);
}
putchar('n');
return 0;
}
int a[5] = ...
char ptr;
ptr = a;
这里a
是指向int
的指针。将它赋值给char
类型的变量是不正确的。编译器应该对此发出警告。不要忽视警告:它们通常表明你的代码中有问题!
您可能打算使用int *
而不是char
:
int a[5] = ...
int *ptr;
ptr = a;
在这段代码中,移动指针将工作:ptr+3
做你想要的。
若要在指针处打印一个字符,则先解除对指针的引用:
printf ("%cn", *(ptr+3)); // alternative spelling: ptr[3]
如果不解引用,编译器会警告你代码不正确。