目录
第一行输入一串字符串,长度小于1000;
第二行输入n 和字符ch(n是在输入n之后有多少次插入或者删除的操作);
第三行输入i 和 j;
示例:
输入:abcdefgh
2 d
1 3
2 6
输出:abcdefgh
字符串变化过程:abcdefgh->abcddefgh->abcdefgh
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char str1[1000] = {0};
char temp;
int n;
char ch;
int i, j, z;
int flag = 1; //定义flag为了区别找没找到那个字符
int count;
scanf("%s", str1);
count = strlen(str1); //count存储字符串长度
if (count < 1000)
{
scanf("%d %c", &n, &ch);
while (n) //当n不为零时执行while循环里面的语句
{
scanf("%d %d", &i, &j);
if (1 <= i && i <= j && j <= count)
{
for (z = i-1; z < j; z++)
{
//存在
if (str1[z] == ch)
{
for (; z < count; z++)
str1[z] = str1[z + 1];
str1[count] = 0;
flag = 0;
}
}
//若不存在
if (flag == 1)
{
for (z = count; z >= j; z--)
{
str1[z + 1] = str1[z];
}
str1[j] = ch;
}
}
flag = 1;
n--;
}
for (z = 0; str1[z]!=0; z++)
printf("%c", str1[z]);
}
return 0;
}
优化后的代码:
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
int get_lenth(char a[]) {//获取数组长度的函数
int i;
for (i = 0; a[i] != 0; i++) {
}
return i;
}
void insert(char a[], int j, char ch) {//插入操作
int lenth = get_lenth(a);
for (int i = lenth; i > j; i--) {
a[i] = a[i - 1];
}
a[j] = ch;
}
int main() {
char str[1000] = { 0 };//初始化为全零
scanf("%s", str);
char ch;
int n;
scanf("%d %c", &n, &ch);
for (int p = 0; p < n; p++) {
int lenth = get_lenth(str);
int i, j, flag = 0;
scanf("%d %d", &i, &j);
for (int x = i - 1; x < j; x++) {
if (str[x] == ch) {
for (int h = x; h < lenth; h++) {//删除运算
str[h] = str[h + 1];
}
str[lenth - 1] = 0;
flag = 1;
break;
}
}
if (flag == 0) {
insert(str, j, ch);//插入运算
}
}
for (int i = 0; str[i] != 0; i++) {//结果查看
printf("%c", str[i]);
}
return 0;
}