hw软件自测题一例

11:题目概述
输入一个长度为N(字符串长度不定)的字符串,字符均为英文字符

请完成如下功能:
1)根据输入的字符串,产生n个字符子串
字符子串生成规则:分隔符是空格,字符子串的排列顺序与原始字符串保持一致,且不包含分隔符
2)根据要求输出某个序号的字符子串,序号1~n表示。

示例:
输入的原始字符串为“ Welcome to  HuaWei   software    training     camp! ”
要求输出的第1个字符子串,则输出结果应为“Welcome”
要求输出的第2个字符子串,则输出结果应为“to”
要求输出的第6个字符子串,则输出结果应为“camp!”

请实现如下接口:
接口1:InputString
Description    : 输入原始字符串
Prototype      : void InputString(char* pInString);
Input Param    : pInString 原始字符串。pInString指向的字符串存储空间在函数外会被释放,请自行申请存储空间
接口2: FindSubString
Description   : 输出排序后指定的某个字符串
Prototype     : void FindSubString(int SerialNumber, char** ppOutString)
Input Param   : SerialNumber:从1~n为字符子串序号
Output Param  : *ppOutString 指针指向字符子串的首地址,字符串必须以’\0’结束。
  如果SerialNumber非法,将*ppOutString指向空字符串。
接口3: Clear
Description   : 清除字符子串序列的存储空间
Prototype     : void Clear(void)

#include <iostream>
#include <memory>
#include "string"
#include <vector>

using namespace std;

static int num = 0;
static char** strArray = NULL;

 void SetSubStringNum(char* pInString)
 {
  while(pInString)
  {
   if(*pInString == ' ' || *pInString == '\0')
    num++;
   if(*pInString == '\0')
    return;
   pInString++;
  }
 }
 //这个函数写的很好
 void SetStringArray(char* pInString)
 {
  strArray = new char*[num];
  int subIndex = 0, subLen = 0;
  while(pInString)
  {
   subLen++;
   if(*pInString == ' ' || *pInString == '\0')
   {
    strArray[subIndex] = new char[subLen];
    memcpy(strArray[subIndex], pInString - subLen + 1, subLen);
    strArray[subIndex][subLen] = '\0';
    subIndex++;
    subLen = 0;
   }
   if(*pInString == '\0')
    return;
   pInString++;
  }
 }

 void InputString(char* pInString)
 {
  SetSubStringNum(pInString);
  SetStringArray(pInString);
 }


//注意ppOutString的处理方式和它与实参的联系
void FindSubString(int SerialNumber, char** ppOutString)
{
 if(SerialNumber >= 1 && SerialNumber <= num)
  *ppOutString = strArray[SerialNumber - 1];
 else
  *ppOutString = NULL; 
}

void Clear()
{
 for(int i = 0; i < num; i++)
  delete[] strArray[i];
 delete[] strArray;
}

int main(){
 InputString("Welcome to HuaWei software training camp!");
 char* OutString;
 //注意第二个参数
 FindSubString(3, &OutString);
 cout << OutString << endl;
 char c;
 cin >> c;
 return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值