C语言 输入一个字符串和一个非负整数N,要求将字符串循环左移N次。 输入格式: 输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
时间: 2024-03-11 19:17:31 浏览: 111
好的,这是一个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;
}
```
这里使用了三次字符串翻转来实现字符串的循环左移操作。
相关问题
用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大于零,则对字符串循环左移N位;如果N小于零,则对字符串循环右移N位。
以下是一个简单的C语言程序,用于实现您所描述的功能。程序中包含了字符串的声明,以及根据输入的整数N进行左移或右移的操作。
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 函数声明
void rotateLeft(char *str, int n);
void rotateRight(char *str, int n);
int main() {
// 声明并初始化字符串
char str[] = "Hello, World!";
int N;
// 提示用户输入整数N
printf("请输入一个整数N:");
scanf("%d", &N);
// 检查N的值并进行相应操作
if (N > 0) {
// 对字符串进行左移操作
rotateLeft(str, N);
} else if (N < 0) {
// 对字符串进行右移操作
rotateRight(str, -N);
} else {
printf("N等于0,无需移动。\n");
}
// 输出移动后的字符串
printf("移动后的字符串为:%s\n", str);
return 0;
}
// 函数定义
void rotateLeft(char *str, int n) {
int len = strlen(str);
// 使n对字符串长度取模,避免无效移动
n = n % len;
// 临时存储要移动的部分
char temp[n + 1];
// 拷贝要移动的部分
memcpy(temp, str, n);
// 将剩余部分左移
memmove(str, str + n, len - n);
// 将原首部部分拷贝到字符串尾部
memcpy(str + len - n, temp, n);
// 添加字符串结束符
str[len] = '\0';
}
void rotateRight(char *str, int n) {
rotateLeft(str, strlen(str) - (n % strlen(str)));
}
```
这段代码首先包含了必要的头文件,并声明了两个辅助函数`rotateLeft`和`rotateRight`分别用于左移和右移字符串。`main`函数中首先声明并初始化了一个字符串,然后提示用户输入一个整数N,并根据N的值调用相应的函数进行字符串的移动操作。
阅读全文