📜  C测验– 112 |问题2(1)

📅  最后修改于: 2023-12-03 15:30:15.376000             🧑  作者: Mango

C测验- 112 | 问题2

本测验中的问题2是一道C语言面试题。该题目要求实现一个左旋字符串的函数,即将字符串的前n个字符移到最后面。具体的要求如下:

  • 函数原型如下:
void rotateString(char *str, int n);
  • 函数参数说明:
    • char *str表示要旋转的字符串;
    • int n表示要旋转的字符个数。
  • 在函数中,需要将字符串的前n个字符移到字符串末尾。例如,对于字符串"abcdef",如果n=2,则旋转后的字符串为"cdefab"

下面是该函数的一种实现:

void rotateString(char *str, int n) {
    int len = strlen(str);
    if (n > len) {
        printf("Error: the length of the string is less than %d.\n", n);
        return;
    }
    char *temp = (char *) malloc(n * sizeof(char));
    strncpy(temp, str, n);
    memmove(str, str + n, len - n);
    strncpy(str + len - n, temp, n);
    free(temp);
}

该函数首先将函数的长度与n进行比较,如果n大于了字符串长度,则返回错误信息。接着,用malloc函数动态分配一个n字节大小的数组temp,将字符串的前n个字符复制到temp中。接着,使用memmove函数将字符串中的前len-n个长度移到字符串的最后面。最后,使用strncpy函数将temp中的n个字符复制到字符串的末尾。最后,释放掉数组temp的空间。

总体来说,这是一道相对简单的题目,非常适合于C语言初学者进行练习和巩固。