第六章 指针

2019-11-07  本文已影响0人  Redcarp

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;
}
上一篇下一篇

猜你喜欢

热点阅读