关于字符串 “*****AB**C*D*****” 中前缀、后缀和中间 '*' 的处理

一、删除前缀 ‘*‘

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*b,*p; //字符串缓冲区;字符串头指针;字符串临时指针
10     int chr_num=0,b_num=0; //输入的字符串中字符的个数;输入的字符串中前缀 * 的个数
11     int i;
12
13     //输入
14     cout<<"Please input a string:"<<endl;
15     gets(chr);
16
17     //统计输入的字符串中字符的个数
18     p=chr; // p 指向字符串的第一个字符
19     while(*p++)
20     {
21         chr_num++;
22     }
23
24     //统计输入的字符串中前缀 * 的个数
25     b=chr; // b 指向字符串的第一个字符
26     while(*b++==‘*‘)
27     {
28         b_num++;
29     }
30
31     //删除输入的字符串中的前缀 *
32     for(i=0;i<chr_num-b_num;i++)
33     {
34         chr[i]=chr[i+b_num];
35     }
36     chr[i]=‘\0‘;
37
38     //输出
39     cout<<"The result:"<<endl;
40     puts(chr);
41
42     return 0;
43 }

二、删除后缀 ‘*‘

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*t,*p; //字符串缓冲区;字符串尾指针;字符串临时指针
10     int chr_num=0,t_num=0; //输入的字符串中字符的个数;输入的字符串中后缀 * 的个数
11
12     //输入
13     cout<<"Please input a string:"<<endl;
14     gets(chr);
15
16     //统计输入的字符串中字符的个数
17     p=chr; // p 指向字符串的第一个字符
18     while(*p++)
19     {
20         chr_num++;
21     }
22
23     //统计输入的字符串中后缀 * 的个数
24     t=chr+chr_num-1; // t 指向字符串的最后一个字符
25     while(*t--==‘*‘)
26     {
27         t_num++;
28     }
29
30     //删除输入的字符串中的后缀 *
31     chr[chr_num-t_num]=‘\0‘;
32
33     //输出
34     cout<<"The result:"<<endl;
35     puts(chr);
36
37     return 0;
38 } 

三、删除前缀和后缀 ‘*‘

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*b,*t,*p; //字符串缓冲区;字符串头指针;字符串尾指针;字符串临时指针
10     int chr_num=0,b_num=0,t_num=0; //输入的字符串中字符的个数;输入的字符串中前缀 * 的个数;输入的字符串中后缀 * 的个数
11     int i;
12
13     //输入
14     cout<<"Please input a string:"<<endl;
15     gets(chr);
16
17     //统计输入的字符串中字符的个数
18     p=chr; // p 指向字符串的第一个字符
19     while(*p++)
20     {
21         chr_num++;
22     }
23
24     //统计输入的字符串中前缀 * 的个数
25     b=chr; // b 指向字符串的第一个字符
26     while(*b++==‘*‘)
27     {
28         b_num++;
29     }
30
31     //统计输入的字符串中后缀 * 的个数
32     t=chr+chr_num-1; // t 指向字符串的最后一个字符
33     while(*t--==‘*‘)
34     {
35         t_num++;
36     }
37
38     //删除输入的字符串中的前缀和后缀 *
39     for(i=0;i<chr_num-b_num-t_num;i++)
40     {
41         chr[i]=chr[i+b_num];
42     }
43     chr[i]=‘\0‘;
44
45     //输出
46     cout<<"The result:"<<endl;
47     puts(chr);
48
49     return 0;
50 } 

四、删除中间 ‘*‘

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*b,*t,*p; //字符串缓冲区;字符串头指针;字符串尾指针;字符串临时指针
10     int chr_num=0; //输入的字符串中字符的个数;输入的字符串中前缀 * 的个数;输入的字符串中后缀 * 的个数
11     int i;
12
13     //输入
14     cout<<"Please input a string:"<<endl;
15     gets(chr);
16
17     //统计输入的字符串中字符的个数
18     p=chr; // p 指向字符串的第一个字符
19     while(*p++)
20     {
21         chr_num++;
22     }
23
24     //令 b 指向字符串中前缀 * 之后的第一个字符
25     b=chr; // b 指向字符串的第一个字符
26     while(*b++==‘*‘);
27
28     //令 t 指向字符串中后缀 * 之前的第一个字符
29     t=chr+chr_num-1; // t 指向字符串的最后一个字符
30     while(*t--==‘*‘);
31
32     //删除字符串中间的 *
33     p=b; //令 p 指向字符串中前缀 * 之后的第一个字符
34     while(b<=t)
35     {
36         if(*b!=‘*‘)
37         {
38             *p=*b;
39             p++;
40             b++;
41         }
42         else
43         {
44             b++;
45         }
46     }
47     ++t; //令 t 指向字符串中后缀 * 的第一个 *
48     while(*t)
49     {
50         *p=*t;
51         p++;
52         t++;
53     }
54     *p=‘\0‘;
55
56     //输出
57     cout<<"The result:"<<endl;
58     puts(chr);
59
60     return 0;
61 } 

五、把字符串中的前缀 * 移动到字符串的末尾 

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*b,*p; //字符串缓冲区;字符串头指针;字符串尾指针;字符串临时指针
10     int chr_num=0,b_num=0; //输入的字符串中字符的个数;输入的字符串中前缀 * 的个数
11     int i;
12
13     //输入
14     cout<<"Please input a string:"<<endl;
15     gets(chr);
16
17     //统计输入的字符串中字符的个数
18     p=chr; // p 指向字符串的第一个字符
19     while(*p++)
20     {
21         chr_num++;
22     }
23
24     //统计输入的字符串中前缀 * 的个数
25     b=chr; // b 指向字符串的第一个字符
26     while(*b++==‘*‘)
27     {
28         b_num++;
29     }
30
31     //把字符串中的前缀 * 移动到字符串的末尾
32     for(i=0;i<chr_num-b_num;i++) //删除输入的字符串中的前缀 *
33     {
34         chr[i]=chr[i+b_num];
35     }
36     while(i<chr_num) //在字符串的末尾添加与前缀个数相同的 *
37     {
38         chr[i++]=‘*‘;
39     }
40     chr[i]=‘\0‘;
41
42     //输出
43     cout<<"The result:"<<endl;
44     puts(chr);
45
46     return 0;
47 } 

六、把字符串中的后缀 * 移动到字符串的开头 

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*b,*t,*p; //字符串缓冲区;字符串头指针;字符串尾指针;字符串临时指针
10     int chr_num=0,b_num=0,t_num=0; //输入的字符串中字符的个数;输入的字符串中前缀 * 的个数;输入的字符串中后缀 * 的个数
11     int i;
12
13     //输入
14     cout<<"Please input a string:"<<endl;
15     gets(chr);
16
17     //统计输入的字符串中字符的个数
18     p=chr; // p 指向字符串的第一个字符
19     while(*p++)
20     {
21         chr_num++;
22     }
23
24     //统计输入的字符串中前缀 * 的个数
25     b=chr; // b 指向字符串的第一个字符
26     while(*b++==‘*‘)
27     {
28         b_num++;
29     }
30
31     //统计输入的字符串中后缀 * 的个数
32     t=chr+chr_num-1; // t 指向字符串的最后一个字符
33     while(*t--==‘*‘)
34     {
35         t_num++;
36     }
37
38     //把字符串中的后缀 * 移动到字符串的开头
39     for(i=chr_num-t_num-1;i>=0;i--) //删除输入的字符串中的后缀 *
40     {
41         chr[i+t_num]=chr[i];
42     }
43     for(i=0;i<t_num;i++) //在字符串的开头添加与后缀个数相同的 *
44     {
45         chr[i]=‘*‘;
46     }
47
48     //输出
49     cout<<"The result:"<<endl;
50     puts(chr);
51
52     return 0;
53 } 

七、使字符串的前缀 * 不多于 n 个

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*b,*p; //字符串缓冲区;字符串头指针;字符串尾指针;字符串临时指针
10     int chr_num=0,b_num=0; //输入的字符串中字符的个数;输入的字符串中前缀 * 的个数;输入的字符串中后缀 * 的个数
11     int i,n=5;
12
13     //输入
14     cout<<"Please input a string:"<<endl;
15     gets(chr);
16
17     //统计输入的字符串中字符的个数
18     p=chr; // p 指向字符串的第一个字符
19     while(*p++)
20     {
21         chr_num++;
22     }
23
24     //统计输入的字符串中前缀 * 的个数
25     b=chr; // b 指向字符串的第一个字符
26     while(*b++==‘*‘)
27     {
28         b_num++;
29     }
30
31     //使字符串的前缀 * 不多于 n 个
32     if(b_num>n)
33     {
34         //删除输入的字符串中的前缀和后缀 *
35         for(i=0;i<chr_num-b_num;i++)
36         {
37             chr[i+n]=chr[i+b_num];
38         }
39         chr[i+n]=‘\0‘;
40     }
41
42     //输出
43     cout<<"The result:"<<endl;
44     puts(chr);
45
46     return 0;
47 } 

八、使字符串的后缀 * 不多于 n 个

 1 #include<iostream>
 2 #include<cstdio>
 3
 4 using namespace std;
 5
 6 //主函数
 7 int main()
 8 {
 9     char chr[20],*t,*p; //字符串缓冲区;字符串头指针;字符串尾指针;字符串临时指针
10     int chr_num=0,t_num=0; //输入的字符串中字符的个数;输入的字符串中前缀 * 的个数;输入的字符串中后缀 * 的个数
11     int i,n=5;
12
13     //输入
14     cout<<"Please input a string:"<<endl;
15     gets(chr);
16
17     //统计输入的字符串中字符的个数
18     p=chr; // p 指向字符串的第一个字符
19     while(*p++)
20     {
21         chr_num++;
22     }
23
24     //统计输入的字符串中后缀 * 的个数
25     t=chr+chr_num-1; // t 指向字符串的最后一个字符
26     while(*t--==‘*‘)
27     {
28         t_num++;
29     }
30
31     //使字符串的后缀 * 不多于 n 个
32     if(t_num>n)
33     {
34         chr[chr_num-t_num+n]=‘\0‘;
35     }
36
37     //输出
38     cout<<"The result:"<<endl;
39     puts(chr);
40
41     return 0;
42 } 

关于字符串 “*****AB**C*D*****” 中前缀、后缀和中间 '*' 的处理

时间: 2024-11-10 07:04:31

关于字符串 “*****AB**C*D*****” 中前缀、后缀和中间 '*' 的处理的相关文章

hdu 4691 最长公共前缀 后缀数组 +lcp+rmq

http://acm.hdu.edu.cn/showproblem.php?pid=4691 去年暑假多校赛的题,当时还不会后缀数组 现在会了,其实自己组合后缀数组跟rmq还是对的,但是题意理解有问题,于是折腾了很久,,,, 此处简单解释下题目样例吧,希望对读者有帮助  以最后一组数据为例 myxophytamyxopodnabnabbednabbingnabit 6 0 9 9 16 16 19 19 25 25 32 32 37 前两行不解释,题目叙述很清楚 从第三行,0 9 指的是第一个字

字符串模式匹配KMP算法中的next数组算法及C++实现

一.问题描述: 对于两个字符串S.T,找到T在S中第一次出现的起始位置,若T未在S中出现,则返回-1. 二.输入描述: 两个字符串S.T. 三.输出描述: 字符串T在S中第一次出现的起始位置,若未出现,则返回-1. 四.输入例子: ababaababcbababc 五.输出例子: 5 六.KMP算法解析: KMP算法分为两步,第一步是计算next数组,第二步是根据next数组通过较节省的方式回溯来比较两个字符串. 网络上不同文章关于next数组的角标含义略有差别,这里取参考文献中王红梅<数据结构

POJ 2752 (KMP 所有可能长度的前缀后缀) Seek the Name, Seek the Fame

题意: 求一个字符串的相同前缀后缀的所有可能的长度,这里该字符串其本身也算自己的前缀和后缀. 分析: 我们知道next数组的性质是,该字符之前的字符串的最大相同前缀后缀. 既然知道了最大的,即next[len]. 递归一次next[ next[len] ],就能求得更小的前缀. 不断的递归把所有所有可能的长度找出来,然后递归输出即可. 1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 400000; 5 ch

POJ - 2752 - Seek the Name, Seek the Fame (KMP-打印前缀后缀长度)

题目传送:POJ - 2752 思路:就是每次都去找当前串的最大相同前缀后缀,找到一个后,令该相同前缀后缀为当前串,再循环调用,注意因为kmp的next函数中的最大相同前缀后缀不包含自身,所以每次都要多输出原串自身长度 AC代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1000005; char s[maxn]; in

前缀++ 后缀++ 运算符重载

前缀++ 后缀++ 运算符重载 2012-12-06 10:38 1733人阅读 评论(0) 收藏 举报  分类: C常用备查(24)  C++(43)  下面例子程序中   const Fraction operator ++(int)   中     int不过是个哑元(dummy),是永远用不上的     它只是用来判断++是prefix   还是   postfix     记住,如果有哑元,则是postfix,否则,就是prefix     就像其他的一元算法和逻辑运算一样     而

tchar 输入输出类 和 string 类 函数简单说明 总结各种前缀后缀

标准输入输出printf类_tprintf : 类同printf_tprintf_l : 类同printf, 但是"_l"表示第二个参数是一个locale.locale是操作系统对语言设定的参数, 这个会影响ANSI字符的语言识别, 在Unicode下应该是无差别的_tprintf_s : 类图printf, 但是和_tprintf相比, _tprintf_s多会做一些检查工作.如果你的"format string"是动态的, 这个能帮助你._tprintf_s_l

c++实验4 栈及栈的应用+回文+中、后缀表达式

栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType *data; //顺序堆栈数组 int top; //栈顶位置指示器 public: SeqStack(int size); //构造函数 ~SeqStack(void) {} //析构函数 void Push(const DataType item); //入栈 DataType Pop(voi

浅谈前、中、后缀表达式

浅谈前.中.后缀表达式 前.中.后缀表达式是信息学奥林匹克竞赛中比较鸡肋的知识点.但是知识点在考纲范围内,而且中缀表达式转后缀表达式是比较有用的知识.所以在这里为大家简单介绍一下. 之前在自学前.中.后缀表达式的时候,发现网上的很多博客和讲解的思路都不是很明了,或者就是对新手不是很友好,感谢@JZYShurak的讲解,让我对这个东西建立了一个直观的认识.所以我来补一篇比较基础,比较好理解,语言比较简洁的博客.希望能对各路大佬有所些许的帮助. 中缀表达式 中缀表达式就是我们生活中常用的表达式,简单

浏览器内核及css中前缀

1.css中前缀: (1) -moz       内核: Gecko内核    浏览器: Firefox , Netscape(6-9) (2) -ms         内核:Trident       浏览器: IE , 世界之窗 , 360安全浏览器(1.0-5.0为Trident,6.0为Trident+Webkit,7.0为Trident+Blink) , 搜狗浏览器(1.x为Trident,2.0及以后版本为Trident+Webkit) ,腾讯TT , 2345浏览器 (3) -we