(矿字号)高级语言程序设计 第六章 指针

第六章 指针

1.统计整数个数

【问题描述】输入一个字符串,其包括数字和非数字字符,如: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。

#include <iostream>
using namespace std;
int main()
{char str[50],*pstr;
 int i,j,k,m,e10,digit,ndigit,a[10],*pa;
cin.getline(str,50);
pstr=&str[0];    //字符指针pstr指向数组str首元素 
pa=&a[0];        //指针pa指向a数组首元素
ndigit=0;        //ndigit代表有多少个整数 
i=0;             //i代表字符串中的第几个字符/
j=0;             //j代表连续数字的位数 
while(*(pstr+i)!='\0')
 {if((*(pstr+i)>='0') && (*(pstr+i)<='9'))
    j++;
  else
   {if (j>0)
     {digit=*(pstr+i-1)-48;          //将个数位赋予digit
      k=1;
      while (k<j)     //将含有两位以上数的其它位的数值累计于digit
       {e10=1;
        for (m=1;m<=k;m++)
        e10=e10*10;                  //e10代表该位数所应乘的因子
        digit=digit+(*(pstr+i-1-k)-48)*e10;  //将该位数的数值累加于digit
        k++;                         //位数k自增
       }
      *pa=digit;                     //将数值放在数组a中
      ndigit++;
      pa++;                         //指针pa指向a数组下一元素
      j=0;
     }
   }
  i++;
 }
 if (j>0)                         //以数字结尾字符串的最后一个数据
  {digit=*(pstr+i-1)-48;          //将个数位赋予digit
   k=1;
   while (k<j)          // 将含有两位以上数的其它位的数值累加于digit
    {e10=1;
     for (m=1;m<=k;m++)
       e10=e10*10;            //e10代表位数所应乘的因子
     digit=digit+(*(pstr+i-1-k)-48)*e10;  //将该位数的数值累加于digit
     k++;  //位数K自增
    }
   *pa=digit;                 //将数值放到数组a中
   ndigit++;
   j=0;
  }
  cout<<ndigit<<endl;
  j=0;
  pa=&a[0];
  for (j=0;j<ndigit;j++)            //打印数据
    cout<<*(pa+j)<<endl;
  cout<<endl;
  return 0;
}

2.字符串排序

【问题描述】有5个字符串,首先将它们按照字符串中字符个数由小到大排序,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。

【输入形式】5个字符串,用回车分隔
【输出形式】输出一个字符串:按5个字符串中字符个数由小到大排序,再分别取出每个字符串的第三个字母合并成一个新的字符串输出,若少于三个字符的输出空格

【样例输入】

test1234

123test

cumt

think

apples

【样例输出】

cumt think apples 123test test1234

concatenate string:mip3s

【样例说明】输出每个字符串之间用一个空格。字符数量相等的串相对顺序不变

#include<iostream>
#include<string.h> 
using namespace std;
int main()
{
	char *pstr[5];
	char str[5][50];
	for(int i=0;i<5;i++)
	{
		pstr[i]=str[i];
	 } 
	 //给指针数组中的指针元素赋值 
	for(int i=0;i<5;i++)
	{
		cin>>pstr[i];
	}
	//输入5个字符串 
	int i,j;
	char *k; //定义指针用于交换 
	for(i=0;i<4;i++)
	{
		for(j=0;j<4-i;j++)
		{
			if(strlen(pstr[j])>strlen(pstr[j+1]))//字符串长度比较 
			{
				k=pstr[j];
				pstr[j]=pstr[j+1];
				pstr[j+1]=k;
			}
			
		}
	}
	//冒泡排序 
	for(int i=0;i<5;i++)
	{
		cout<<pstr[i]<<' ';
	}
	//排序后输出 
	cout<<endl<<"concatenate string:"; 
	for(int i=0;i<5;i++)
	{
		if(*(pstr[i]+2))cout<<*(pstr[i]+2);
		else cout<<' ';
	}
	return 0;
}

3.插入字符串

【问题描述】从键盘输入一个字符串,并在串中的第一次出现的最大元素后边插入字符串”ab”。

【输入形式】任意输入一个字符串

【输出形式】在串中的最大元素后边插入字符串”ab”

【样例输入】

123csCUMT

【样例输出】

123csabCUMT

【样例说明】为了保证输入的字符串有空格,请使用cin.getline(char* , int);不要使用gets,本系统不支持。只插入一次ab。

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	char *pstr,str[50];
	pstr=str;
	cin.getline(str,50);
	int len,max=0;//len值字符串的长度,max指最大元素的位置 
	len=strlen(str);
	for(int i=0;i<len;i++)
	{
		if(*(pstr+i)>*(pstr+max))max=i;
	}
	//找出最大元素的位置
	for(int i=len;i>max;i--)
	{
		*(pstr+i+2)=*(pstr+i);
	 } 
	 str[max+1]='a';
	 str[max+2]='b';
	 cout<<str;			
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值