Online Compiler C

#include <stdio.h> enum {size = 1001}; void hhh(char a[size], long long int len) { char first = a[len-1]; while(a[len] != '\0') { a[len+1] = a[len]; len--;; } a[len] = first; } int main() { long long int k, lon = 0; char a[1001]; scanf("%lld ", &k); scanf("%[^\n]", a); int p = 0; while(a[p] != '\0' ) { lon++; p++; } if(k > lon) { k = k % lon; } for(int i = 0; i< k; i++) { hhh(a,lon); } for(int i = 0; i< lon; i++) { printf("%c", a[i]); } return 0; }
这段代码试图实现字符串的循环右移。它定义了一个函数 `hhh`,每次将字符串的最后一个字符移到开头,然后在 `main` 中重复调用 `k` 次。但代码中存在一些逻辑错误。

- 函数 `hhh` 中,`while(a[len] != '\0')` 这个条件有问题。你传入的 `len` 是字符串长度,但 `a[len]` 已经是字符串结束符 `'\0'` 了,所以循环体根本不会执行。你需要思考如何从倒数第二个字符开始逐个后移,而不是从最后一个字符开始。
- 在 `hhh` 的循环里,`len--` 后面多了一个分号,变成了 `len--;;`,这会导致 `len` 只减一次,但循环条件检查的是 `a[len]`,而 `len` 在循环中并没有正确更新来遍历整个字符串。你需要重新设计循环的索引控制方式。