第六章 指针
1.插入字符串
【问题描述】从键盘输入一个字符串,并在串中的第一次出现的最大元素后边插入字符串”ab”。
【输入形式】任意输入一个字符串
【输出形式】在串中的最大元素后边插入字符串”ab”
【样例输入】
123csCUMT
【样例输出】
123csabCUMT
【样例说明】为了保证输入的字符串有空格,请使用cin.getline(char* , int);不要使用gets,本系统不支持。只插入一次ab。
【评分标准】提交源文件“6-3.cpp”。
#include<iostream>
#define x 20
using namespace std;
int main()
{
char r[x+2]={'\0'};
char s[x]={'\0'};//利用cin.getline()函数从键盘录入一句英文,其中每个单词之间用一个空格隔开,最后用'.'
cin.getline(s,x);//cin.getline(接收字符串的变量,接收字符个数,结束字符【默认为'\0'】)
//char *p=s;
char max=s[0];
int i,j,k;
for(i=0;i<x;i++)
{
if(s[i]>max)
{
max=s[i];
j=i;
}
}
//cout<<j<<endl;局部验证正确
for(k=0;k<=j;k++)
{
r[k]=s[k];
//cout<<r[k];
}
r[j+1]='a';
//cout<<r[j+1];
r[j+2]='b';
//cout<<r[j+2];
for(k=j+3;k<=x+2&&s[k-2]!='\0';k++)
{
r[k]=s[k-2];
//cout<<r[k];
}
for(i=0;i<x+3;i++)
{
if(r[i]!='\0')
cout<<r[i];
}
/*
for(i=0;i<x+3;i++)为什么不能这么输出呢?好吧,他现在又能了,aaaaaa~
{
if(r[i]!='\0')
cout<<r[i];
}
*/
return 0;
}
2.统计整数个数
【问题描述】输入一个字符串,其包括数字和非数字字符,如:a123x456 17935? 098tab,将其中连续的数字作为一个整数,依次存放到数组a中,统计共有多少个整数,并输出这些数。
【输入形式】数字和非数字字符的字符串
【输出形式】1)整数个数2)分别输出整数
【样例输入】
a123x456 17935? 098tab583
【注意需要保留带有空格的字符串,请不要使用gets,cin,练习使用cin.getline(char *str, int maxnum)】
【样例输出】
5
123
456
17935
98
583
【样例说明】第一个输出项为整数的个数,后面的分别为具体的整数。注意,不需要输出提示类文字,如:“整数为”,“分别为”等字样。直接输出结果。有一个数字的也要输出。测试用例中没有超过整数范围连续数字。当遇到0开头的数字应舍去0。
【评分标准】提交文件名6-5.cpp。
#include<iostream>
#define x 50
using namespace std;
int main()
{
char a[x];//本来想用指针*p=a,但没用上
cin.getline(a,x);
int i,j=0;
for(i=0;i<x;i++)//计算连续是整数的个数j,2个for循环基本相同
{
if(a[i]>48&&a[i]<58)
{
if(a[i+1]<=48||a[i+1]>=58)
{
j++;
}
}
}
cout<<j<<endl;
for(i=0;i<x;i++)//输出连续的整数,2个for循环基本相同
{
if(a[i]>48&&a[i]<58)
{
cout<<a[i];
if(a[i+1]<=48||a[i+1]>=58)
{
cout<<endl;
}
}
}
return 0;
}
3.字符串排序
【问题描述】有5个字符串,首先将它们按照字符串中字符个数由小到大排序,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。
【输入形式】5个字符串,用回车分隔
【输出形式】输出一个字符串:按5个字符串中字符个数由小到大排序,再分别取出每个字符串的第三个字母合并成一个新的字符串输出,若少于三个字符的输出空格
【样例输入】
test1234
123test
cumt
think
apples
【样例输出】
cumt think apples 123test test1234
concatenate string:mip3s
【样例说明】输出每个字符串之间用一个空格。字符数量相等的串相对顺序不变。
【评分标准】提交文件名6-7.cpp。
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
void sort(int len[]);
struct yigezifuchuan//结构体中为1个字符串,共5个,每个字符串都具有以下2个属性,字符串内容,字符串长度
{
char str[50];
int len;
}a[5];
int main()
{
int i,j;
for(i=0;i<5;i++)
{
cin>>a[i].str;
a[i].len=strlen(a[i].str);
}
for(i=0;i<4;i++)//共进行4趟比较,不是5次,比原始数据少一次
{
for(j=0;j<4;j++)//在每趟中要进行(4-i)次两两比较,不是(5-i)次两两比较
{
if(a[j].len>a[j+1].len)//如果前面的字符串长度大于后面的字符串长度,则交换字符串
{
swap(a[j],a[j+1]);//不是交换swap(a[j].str,a[j+1].str),而是交换整个结构体
}
}
}
for(i=0;i<5;i++)
{
cout<<a[i].str<<" ";
}
cout<<endl;
cout<<"concatenate string:";
for(int i=0;i<5;i++)
{
if(a[i].str[2]=='\0')
{
cout<<' ';
}
else
{
cout<<a[i].str[2];
}
}
return 0;
}