如何在C中移动字符串中的字符?

  • 本文关键字:字符 字符串 移动 c
  • 更新时间 :
  • 英文 :


如何将字符串中的字符向右移动?例如,我想移动"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]

如果不解引用,编译器会警告你代码不正确。

最新更新