题目概述
输入一个长度为N(字符串长度不定)的字符串,字符均为英文字符
请完成如下功能:
1)根据输入的字符串,产生n个字符子串
字符子串生成规则:分隔符是空格,字符子串的排列顺序与原始字符串保持一致,且不包含分隔符
2)根据要求输出某个序号的字符子串,序号1~n表示。
示例:
输入的原始字符串为“ Welcome to 
要求输出的第1个字符子串,则输出结果应为“Welcome”
要求输出的第2个字符子串,则输出结果应为“to”
要求输出的第6个字符子串,则输出结果应为“camp!”
请实现如下接口:
接口1:InputString
Description 
Prototype 
Input Param 
接口2: FindSubString
Description 
Prototype 
Input Param 
Output Param 
 
接口3: Clear
Description 
Prototype 
网上转来的一篇简短小程序:
#include <iostream>
#include <memory>
#include "string"
#include <vector>
using namespace std;
static int num = 0;
static char** strArray = NULL;
 
 
 
 
 
 
 
 
 
 
 
//
/***
 
 
  char last_get_char=' ';
 
 
if(*pInString
 == ' ' || *pInString == '\0')//这样改就可以了
 
if(last_get_char==' ')
continue;
else
num++;
     }
 
 
last_get_char=*pInString; 
 
 
 
**/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//注意ppOutString的处理方式和它与实参的联系
void FindSubString(int SerialNumber, char** ppOutString)
{
 
 
 
 
}
void Clear()
{
 
 
 
}
int main(){
 
 
 
 
 
 
 
 
}
自己的程序稍后上传
/*******************************************************************************
File Name     : main.cpp
Version       : 1.0
Author        : Eric
Created       : 2012/5
Last Modified :
Description   :
                1) 根据输入的字符串,产生n个字符子串
                    字符子串生成规则:
                        分隔符是空格,字符子串的排列顺序与原始字符串保持一致,且不包含分隔符
                2)根据要求输出某个序号的字符子串,序号1~n表示。
Function List :
                //计算字符子串数目,转化为字符串,
                void SumStringMakeList(char* pInString);
                //字符链表转化为字符串
                void CharList2ArrString(char* pInString);
                //接口1 输入字符串
                void InputString(char* pInString);
                //接口2 查找字符串
                void FindSubString(int SerialNumber, char** ppOutString);
                //接口3 释放空间
                void Clear(void);
History       :
1.Date        : 2012/5
Author        : Eric
Modification: Created file
******************************************************************************/
#include <iostream>
#include <string>
#include "stdlib.h"
using namespace std;
//*********字符链表*********
typedef struct charnode
{
    char data;
    struct charnode* next;
}charnode,*pCharLinkList;
pCharLinkList head_char_list;
//静态全局变量 字符子串头指针
static char** OutStrings;
//静态全局变量 字符子串的字符数
static int* CharOfString;
//静态全局变量 字符子串数量
static int  NumOfString=0;
char* testlist={"   this is  a   testline of   this program hahahahahahahahahahhahahhahahahahahahahah    "};
//计算字符子串数量,转化为字符串,
void SumStringMakeList(char* pInString);
//字符链表转化为字符串
void CharList2ArrString(char* pInString);
//接口1
void InputString(char* pInString);
//接口2
void FindSubString(int SerialNumber, char** ppOutString);
//接口3
void Clear(void);
//帮助函数
void Help(void);
int main()
{
    int SerialNumber=0;
    char * outputstring;
    Help();
    cout<<testlist<<endl;
    InputString(testlist);
    cout <<endl<< "the testline have   "<< NumOfString<<"   strings"<<endl;
    for(SerialNumber=1;SerialNumber<=NumOfString;SerialNumber++)
    {
        FindSubString( SerialNumber,&outputstring);
        cout<<outputstring<<endl;
    }
    Clear();
    return 0;
}
void Help(void)
{
    cout << "this program is a program of pre-test of huawei software training camp"
    "you can modify the testline if you want \n"
    "the output is output the strings in the testline in order \n"
    "Copyright (C), 2012-2013,Eric  Huawei Tech. Co., Ltd.\n"
    "\n"
    "\n" ;
}
void InputString(char* pInString)
{
    SumStringMakeList(pInString);
    CharList2ArrString(pInString);
}
void SumStringMakeList(char* pInString)
{
    char inputed_char;
char last_inputed_char=' ';
charnode *s, *r=NULL;
head_char_list=(charnode * )malloc(sizeof(charnode));
head_char_list->data='0';
head_char_list->next=NULL;
while(pInString)
{
//构建字符链表
inputed_char=*pInString;
if(inputed_char==' '||inputed_char=='\0')
{
   if(inputed_char=='\0')
   {
       if(last_inputed_char!=' ')//让链表的最后都改存成'\0'
                {
                    NumOfString++;
                    s=(charnode*)malloc(sizeof(charnode));
                     s->data=' ';
                     s->next=NULL;
                     if(head_char_list->next==NULL)
                     {
                         s->next=head_char_list->next;
                         head_char_list->next=s;
                     }
                     else r->next=s;
                     r=s;//当前尾节点
                }
       return;
   }
   if(inputed_char==' ')
   {
       if(last_inputed_char==' ')//如果是分隔符
                {//上个字符为分隔符则不保存 不计数
                    pInString++;
                    continue;
                }
                else
                {
                    NumOfString++;
                }
   }
}
s=(charnode*)malloc(sizeof(charnode));
s->data=inputed_char;
s->next=NULL;
if(head_char_list->next==NULL)
{
s->next=head_char_list->next;
head_char_list->next=s;
}
else r->next=s;
cout<<s->data;//测试链表用
r=s;//当前尾节点
last_inputed_char=inputed_char;
pInString++;
}
}
void CharList2ArrString(char* pInString)
{
    char inputed_char;
    int indexofstring=0,indexofchar=0;
    int NumOfCharOfNowString=0;
char last_inputed_char=' ';
    CharOfString    = new int[NumOfString];
    OutStrings      = new char*[NumOfString];
    //先遍历得知每个string的长度
    while(pInString)
{//构建字符链表
inputed_char=*pInString;
if(inputed_char==' '||inputed_char=='\0')
{
   if(inputed_char=='\0')
   {//如果是结尾符,不计数保存上个string的char数
       CharOfString[indexofstring]=NumOfCharOfNowString;
       break;
   }
            if(last_inputed_char==' ')//如果是分隔符
{//上个字符为分隔符,则不保存不计数入
   pInString++;
                continue;
}
else
{
   CharOfString[indexofstring]=NumOfCharOfNowString;
   NumOfCharOfNowString=0;//归零
indexofstring++;//自增
}
}
//不是结尾符 不是分隔符计数
         if(inputed_char!=' ')
         NumOfCharOfNowString++;//
last_inputed_char=inputed_char;
pInString++;
}
for(int i=0;i<NumOfString;i++)
{
   cout<<CharOfString[i]<<' ';
}
cout<<endl;
for(indexofstring=0;indexofstring<NumOfString;indexofstring++)
{
   OutStrings[indexofstring] = new char[CharOfString[indexofstring]];
}
    indexofstring=0;
    indexofchar=0;
    //链表递出 赋值销毁
    while(head_char_list->next)
    {
        indexofchar++;
        if(head_char_list->next->data==' ')
        {
            OutStrings[indexofstring][indexofchar-1]='\0';
            indexofstring++;
            indexofchar=0;
        }
        else
        {
             OutStrings[indexofstring][indexofchar-1]=head_char_list->next->data;
        }
        //此处还应加链表释放
        charnode* p=head_char_list->next;
        free(head_char_list);
        head_char_list=p;
    }
    delete[]CharOfString;
}
void Clear()
{
    for(int i = 1; i < NumOfString; i++)
        delete [] OutStrings[i];//不知为何此处用 delete[]OutStrings[i];报错
    delete[] OutStrings;
    return;
}
void FindSubString(int SerialNumber, char** ppOutString)
{
  if(SerialNumber >= 1 && SerialNumber <= NumOfString)
  *ppOutString = OutStrings[SerialNumber - 1];
 else
  *ppOutString = NULL;
}
//空间释放的时候有问题,时而通过时而通不过。。。。 delete 用的有问题 写入越界!
改正后的 通过的
/******************************************************************************
Copyright (C), 2001-2011, Huawei Tech. Co., Ltd.
******************************************************************************
File Name     : FindSubString.cpp
Version       :
Author        :
Created       : 2012/5
Last Modified :
Description   :
Function List :
History       :
1.Date        : 2012/5
Author      : Eric
Modification: Created file
******************************************************************************/
#include <iostream>
#include <string.h>
#include "stdlib.h"
using namespace std;
//*********字符链表*********
typedef struct charnode
{
    char data;
    struct charnode* next;
}charnode,*pCharLinkList;
pCharLinkList head_char_list;
//静态全局变量 字符子串头指针
static char** OutStrings;
//静态全局变量 字符子串的字符数
static int* CharOfString;
//静态全局变量 字符子串数量
static int  NumOfString=0;
//计算字符子串数量,转化为字符串,
void SumStringMakeList(char* pInString);
//字符链表转化为字符串
void CharList2ArrString(char* pInString);
//接口1
void InputString(char* pInString);
//接口2
void FindSubString(int SerialNumber, char** ppOutString);
//接口3
void Clear(void);
//帮助函数
/******************************************************************************************************
Description   : 输入原始字符串
Prototype     : void InputString(char* pInString);
Input Param   : pInString 原始字符串。pInString指向的字符串存储空间在函数外会被释放,请自行申请存储空间
Output Param  : 无
Return Value  : 无
********************************************************************************************************/
void InputString(char* pInString)
{
    /* 在这里实现功能 */
    SumStringMakeList(pInString);
    CharList2ArrString(pInString);
    return;
}
void SumStringMakeList(char* pInString)
{
    char inputed_char;
char last_inputed_char=' ';
charnode *s, *r=NULL;
head_char_list=(charnode * )malloc(sizeof(charnode));
head_char_list->data='0';
head_char_list->next=NULL;
while(pInString)
{
//构建字符链表
inputed_char=*pInString;
if(inputed_char==' '||inputed_char=='\0')
{
   if(inputed_char=='\0')
   {
       if(last_inputed_char!=' ')//让链表的最后都改存成'\0'
                {
                    NumOfString++;
                    s=(charnode*)malloc(sizeof(charnode));
                     s->data=' ';
                     s->next=NULL;
                     if(head_char_list->next==NULL)
                     {
                         s->next=head_char_list->next;
                         head_char_list->next=s;
                     }
                     else r->next=s;
                     r=s;//当前尾节点
                }
       return;
   }
   if(inputed_char==' ')
   {
       if(last_inputed_char==' ')//如果是分隔符
                {//上个字符为分隔符则不保存 不计数
                    pInString++;
                    continue;
                }
                else
                {
                    NumOfString++;
                }
   }
}
s=(charnode*)malloc(sizeof(charnode));
s->data=inputed_char;
s->next=NULL;
if(head_char_list->next==NULL)
{
s->next=head_char_list->next;
head_char_list->next=s;
}
else r->next=s;
r=s;//当前尾节点
last_inputed_char=inputed_char;
pInString++;
}
}
void CharList2ArrString(char* pInString)
{
    char inputed_char;
    int indexofstring=0,indexofchar=0;
    int NumOfCharOfNowString=0;
char last_inputed_char=' ';
    CharOfString    = new int[NumOfString];
    OutStrings      = new char*[NumOfString];
    //先遍历得知每个string的长度
    while(pInString)
{//构建字符链表
inputed_char=*pInString;
if(inputed_char==' '||inputed_char=='\0')
{
   if(inputed_char=='\0')
   {//如果是结尾符,不计数保存上个string的char数
if(last_inputed_char!=' ')
       CharOfString[indexofstring]=NumOfCharOfNowString;
       break;
   }
            if(last_inputed_char==' ')//如果是分隔符
{//上个字符为分隔符,则不保存不计数入
   pInString++;
                continue;
}
else
{
   CharOfString[indexofstring]=NumOfCharOfNowString;
   NumOfCharOfNowString=0;//归零
indexofstring++;//自增
}
}
//不是结尾符 不是分隔符计数
         if(inputed_char!=' ')
         NumOfCharOfNowString++;//
last_inputed_char=inputed_char;
pInString++;
}
for(indexofstring=0;indexofstring<NumOfString;indexofstring++)
{
   OutStrings[indexofstring] = new char[CharOfString[indexofstring]+1];
}
delete[]CharOfString;
    indexofstring=0;
    indexofchar=0;
    //链表递出 赋值销毁
    while(head_char_list->next)
    {
        indexofchar++;
        if(head_char_list->next->data==' ')
        {
            OutStrings[indexofstring][indexofchar-1]='\0';
            indexofstring++;
            indexofchar=0;
        }
        else
        {
             OutStrings[indexofstring][indexofchar-1]=head_char_list->next->data;
        }
        //此处还应加链表释放
        charnode* p=head_char_list->next;
        free(head_char_list);
        head_char_list=p;
    }
  
}
/*****************************************************************************
Description   : 输出排序后指定的某个字符串
Prototype     : void FindSubString(int SerialNumber, char** ppOutString)
Input Param   : SerialNumber  排序后的序列号,从1~N为按照字典从小到大的排列顺序
Output Param  : *ppOutString 指针指向字符子串的首地址,字符串必须以’\0’结束。
如果SerialNumber非法,将*ppOutString指向空字符串。
Return Value  : 无
*****************************************************************************/
void FindSubString(int SerialNumber, char** ppOutString)
{
    /* 在这里实现功能 */
if(SerialNumber >= 1 && SerialNumber <= NumOfString)
*ppOutString = OutStrings[SerialNumber - 1];
else
*ppOutString = "";
    return;
}
/*****************************************************************************
Description   : 清除字符串序列的存储空间
Prototype     : void Clear(void)
Input Param   : 无
Output Param  : 无
Return Value  : 无
*****************************************************************************/
void Clear(void)
{
    /* 在这里实现功能 */
for(int i = 0; i < NumOfString; i++)
        delete [] OutStrings[i];//不知为何此处用 delete[]OutStrings[i];报错
    delete[] OutStrings;
    return;
}
                  
                  
                  
                  
                            
本文深入探讨了信息技术领域的核心概念与应用实例,涵盖了从前端开发到AI音视频处理等多个细分技术领域,旨在为读者提供全面的技术知识概览与实践指导。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					834
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            