题目1:在一个字符串指定位置插入一个字符
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] ="hello world";
char ptr[20];
char a;
int i;
int num=0;
printf("please input one\n");
scanf("%c",&a);
printf("please input position\n");
scanf("%d",&num);
for(i=0;str[i] !='\0';i++)//当i值增加时检测字符数组'\0'一般字符数组以'\0'结束
{
ptr[i]=str[i];//将str数组元素赋给ptr数组
}
ptr[num]=a;//将指定位置值改变成所要的字符
for(i=num;ptr !='\0';i++)
{
ptr[i+1]=str[i];//从指定位置开始依次往后加元素完成数组的拼接
}
printf("%s\n",ptr);
}
题目2:在字符串的指定位置插入字符串
#include <stdio.h>
#include<string.h>
int main()
{
char str[64] ={0},ptr[32] = {0};
int num ,len_str, len_ptr,i;
printf("please input:\n");
scanf("%s%d%s",str,&num,ptr);//num从0开始
len_str =strlen(str);//
len_ptr=strlen(ptr);//检测输入字符串长度strlen不包括'\0'
for(i=0;i<len_str -num ;i++)//将指定位置后面的元素往后移动,从最后一个元素往后移动len_ptr的位数
{
str[len_str - 1 -i + len_ptr]=str[len_str -1 -i];//,要移动的数的位置和移动后位置与2个字符串长度有关
}
strncpy(str +num ,ptr,len_ptr);//str作为以为数组首元素地址+num指向0+num位置的元素将ptr的元素从这个位置开始复制,复制ptr字符串长度的位数。
printf("%s\n",str);
}
3.题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
#include <stdio.h>
int main()
{
int num,person;
int k=0;//用来记1,2,3
int flag[1000]={0};
int i =0;//用来数人数
printf("please input\n");
scanf("%d",&num);
person = num;;//因为人数一直变的,保存人数(一些需要后面参考的值可以先保存起来)
while(person !=1)//结果只有一个人标记报3的人为1,其他人为0
{
i++;
if(flag[i]==0)
{
k++;
}
if(k==3)
{
k=0;
flag[i]=1;//报到3赋值1,注意k值在输出后一个3后继续计数
person--;
}
if(i==num)
{
i=0;//将数组从flag[0]开始
}
}
for(i=1;i<=num;i++)
{
if(flag[i]==0)
{
printf("the last one:%d\n",i);
break;
}
}
}
第一轮 flag里面的值:00100(假设5个人)
第二轮 :10100
第三轮: 10101
第四轮 : 11101第4个人为最后一个