字符串循环左移,C语言代码
时间: 2023-09-12 08:03:20 浏览: 126
以下是实现字符串循环左移的 C 语言代码:
```c
#include <stdio.h>
#include <string.h>
void leftRotateString(char* str, int n) {
int len = strlen(str);
n = n % len;
char temp[n + 1];
strncpy(temp, str, n);
temp[n] = '\0';
memmove(str, str + n, len - n + 1);
strcat(str, temp);
}
int main() {
char str[] = "abcdefg";
int n = 3;
leftRotateString(str, n);
printf("%s\n", str); // 输出 "defgabc"
return 0;
}
```
首先,我们需要计算出需要左移的位数 `n` 和字符串的长度 `len`。如果 `n` 大于 `len`,则可以将 `n` 取模 `len`,这样就可以避免不必要的移动。
然后,我们将前 `n` 个字符复制到一个临时数组 `temp` 中,并在末尾添加一个空字符。
接着,我们使用 `memmove` 函数将剩余的字符向前移 `n` 位,并确保字符串以空字符结尾。最后,我们将 `temp` 中的字符连接到原始字符串的末尾。
相关问题
用c语言输出:输入一个字符串和一个非负整数N,要求将字符串循环左移N次。 输入格式: 输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。 输出格式: 在一行中输出循环左移N次后的字符串。
```c
#include <stdio.h>
#include <string.h>
void reverse(char* str, int start, int end) {
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
void leftRotateString(char* str, int n) {
int len = strlen(str);
// 对整个字符串进行翻转
reverse(str, 0, len - 1);
// 对前n个字符进行翻转
reverse(str, 0, n - 1);
// 对剩余的字符进行翻转
reverse(str, n, len - 1);
}
int main() {
char str[101];
int n;
fgets(str, sizeof(str), stdin);
scanf("%d", &n);
str[strcspn(str, "\n")] = '\0'; // 去除输入字符串中的换行符
leftRotateString(str, n);
printf("%s\n", str);
return 0;
}
```
这段代码会读取一个不超过100个字符长度的字符串和一个非负整数N,并对字符串进行循环左移N次。首先,定义了一个 `reverse` 函数,用于将字符串中指定范围的字符进行翻转。然后,定义了 `leftRotateString` 函数,该函数先对整个字符串进行翻转,然后对前N个字符进行翻转,最后对剩余的字符进行翻转。在 `main` 函数中,通过 `fgets` 函数读取输入的字符串,并使用 `scanf` 函数读取非负整数N。然后,调用 `leftRotateString` 函数对字符串进行循环左移N次,并输出结果。
C语言 输入一个字符串和一个非负整数N,要求将字符串循环左移N次。 输入格式: 输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
好的,这是一个C语言的问题。你可以参考下面的代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
void reverse(char s[], int start, int end) {
while (start < end) {
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}
void left_rotate_string(char s[], int n) {
int len = strlen(s);
n %= len;
reverse(s, 0, n - 1);
reverse(s, n, len - 1);
reverse(s, 0, len - 1);
}
int main() {
char s[MAX_LEN + 1];
int n;
fgets(s, MAX_LEN + 1, stdin);
scanf("%d", &n);
left_rotate_string(s, n);
printf("%s", s);
return 0;
}
```
这里使用了三次字符串翻转来实现字符串的循环左移操作。
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)