1、输入一串字符,在指定的位置插入一个字符:
4 main()
5 {
6 int i, p, length;
7 char c, a[20], b[100] ={'0'};
8 printf("please input address:\n ");
9 scanf("%d",&p);
10 getchar();
11 printf("please input : \n");
12 scanf("%c",&c);
13 getchar();
14 printf("please input your word:\n");
15 scanf("%s",&a);
16 printf("%s\n",a);
17
18 length = sizeof(a)/sizeof(a[0]);
19 printf("%d\n",length);
20
21 for(i = 0; i < length; i++)
{
23 if(i < p-1)
24 {
25 b[i] = a[i];
26 }
27 else if(i == p-1)
28 {
29 b[i] = c;
30 }
31 else
32 {
33 b[i] = a[i-1];
34 }
35 }
36 printf("%s\n%s\n", a,b);
37
38
39 }
2、在字符串中插入另一段字符串:
4int main()
5 {
6 int addr, length1, length2, i, length;
7 char a[100], b[100], c[200];
8 printf("please input your word (a)\n");
9 scanf("%s",&a);
10 getchar();
11 printf("please input address\n");
12 scanf("%d",&addr);
13 getchar();
14 printf("please input your modify word(b)\n");
15 scanf("%s",&b);
16
17 length1 = strlen(a);
18 length2 = strlen(b);
19 length = length1 + length2;
20 printf("%d\t %d\t %d\n",length1,length2,length);
21 for(i = 0; i < 100; i++)
22 {
if(i < addr-1)
24 {
25 c[i] = a[i];
26 }
27 else if(i >= addr-1 && i < addr+length2-1)
28 {
29 c[i] = b[i-addr + 1];
30 }
31 else
32 {
33 c[i] = a[i-length2];
34 }
35 //c[i] = '\0';
36 }
37 c[length] = '\0';
38 printf("%s\n%s\n%s\n",a,b,c);
39
return 0;
40 }
在做着两道题的过程中出现了一些问题我觉得是很有意义的,虽然这两个小问题卡了我个把小时。我觉得对以后应该会很有帮助。
①就是第一段代码中有一句话else if(i == p-1)当时把==写成了=结果编译也没有报错,运行之后成程序不退出一直在执行。
②第二段代码中编译很成功没有错误和警告,结果是把第二段代码可复制过去之后,原本之后的代码却不见了,这个确实花了很长时间,上面第二段代码的27行else if(i >= addr-1 && i < addr+length2-1)后面i < addr+length2-1一开始写成了addr + length2没有减一,与我们常识一样,其实数组是从零开始的所以第length位其实是'\0';
3、经过半天的复习加运用,现在可以较为灵活的运用数组了,比如下面这题:
题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
解法:①利用数组存储n值并赋值连续的1 2 3,②再将数组中所有3改为零;③接着用count来统计数组中所有不为零的数,到三个时即count=3时复位并且把a[i] = 3;④循环上面②③过程,最终不为零的数的下标加一即最后的人;代码如下:
4 {
5 int a[100], i, j, k;
6 int count = 0, n;
7 printf("please input a number\n");
8 scanf("%d",&n);
9 for(i = 0; i < n; i++)
10
11 {
12 if((i + 1) % 3 == 0)
13 a[i] = 3;
14 else if((i + 1) % 3 == 1)
15 a[i] = 1;
16 else
17 a[i] = 2;
18 printf("%d\t",a[i]);
19 }
20 printf("\n\n");
21
22 for(k = 0; k < sqrt(n)+1; k++ )
23 {
24 for(j = 0; j < n; j++)
25 {
26 if(a[j]%3 == 0)
27 a[j] = 0;
28 }
29 for(i = 0; i < n; i++)
30 {
31 if(a[i] != 0)
32 {
33 count++;
34 if(count % 3 == 0)
35 {
36 a[i] = 3;
37 count = 0;
38
39 }
40 }
41 }
42
43 }
}