用c语言写,将字符串前移
时间: 2023-05-25 16:06:17 浏览: 692
若要将字符串前移k个位置,可以使用下面的代码:
```c
#include<stdio.h>
#include<string.h>
void move(char* str, int k){
int len = strlen(str);
k = k % len; // 防止k大于len的情况
// 将前k个字符移到末尾
char temp[k];
strncpy(temp, str, k);
memmove(str, str + k, len - k);
strncpy(str + len - k, temp, k);
}
int main(){
char str[] = "hello world";
int k = 3;
printf("Before move: %s\n", str);
move(str, k);
printf("After move: %s\n", str);
return 0;
}
```
输出:
```
Before move: hello world
After move: lo worldhel
```
该代码利用了`strncpy`和`memmove`函数来实现字符串的前移。`strncpy`函数可以从源字符串中复制指定长度的字符到目标字符串,并在需要的情况下自动在目标字符串末尾加上空字符。`memmove`函数可以移动指定长度的内存块,它能够处理源和目标内存区域的重叠情况。这两个函数结合使用,可以实现字符串的前移。
相关问题
不用字符串函数,用c语言实现字符串前移
可以使用指针来实现字符串前移:
```
#include <stdio.h>
#define MAX_LEN 100
void moveString(char *str, int n);
int main() {
char str[MAX_LEN];
int n;
printf("请输入字符串:");
scanf("%s", str);
printf("请输入前移的位数:");
scanf("%d", &n);
moveString(str, n);
printf("前移后的字符串为:%s\n", str);
return 0;
}
void moveString(char *str, int n) {
int len = 0;
char *p = str;
while (*p != '\0') {
len++;
p++;
}
// 将 n 对 len 取余,得到实际需要前移的位数
n = n % len;
// 如果移动的位数等于 0,不需要移动
if (n == 0) {
return;
}
// 从第 n 个字符开始,将每个字符往前移动 n 位
for (int i = n; i < len; i++) {
str[i-n] = str[i];
}
// 将最后 n 个字符移到字符串末尾
for (int i = len-n; i < len; i++) {
str[i] = str[i-n+len];
}
}
```
在函数的实现中, `moveString` 函数接收一个指针类型的参数 `str` 和一个整型参数 `n`,表示需要把 `str` 前移 `n` 位。首先使用指针来计算字符串的长度,并通过取余得到实际需要前移的位数 `n`。如果 `n` 等于 0,就不需要前移,直接返回。
然后从第 `n` 个字符开始,使用循环将每个字符往前移动 `n` 位。最后再将最后 `n` 个字符移到字符串末尾。
用c语言实现,在主函数输入一字符串,通过fun函数判断,如果字符串前导符号*的个数k大于在主函数输入的n时,将字符串下标为k开始到结尾的字符串前移k-n个单位。如果n大于或等于k,则原字符串不变,通过主函数输出字符串
```
#include <stdio.h>
#include <string.h>
void fun(char *s, int n);
int main()
{
char s[100];
int n;
printf("输入一个字符串:");
scanf("%s", s);
printf("输入一个整数n:");
scanf("%d", &n);
fun(s, n);
printf("处理结果为:%s\n", s);
return 0;
}
void fun(char *s, int n)
{
int len = strlen(s);
int k = 0;
// 统计前导符号*
while (k < len && s[k] == '*') {
k++;
}
if (k > n) {
// 前导符号*的个数大于n,需要前移
int i;
for (i = k; i < len; i++) {
s[i - k + n] = s[i];
}
s[i - k + n] = '\0';
}
}
```
阅读全文