[编程练习]字符串相关

1.题目:设计函数 void Insert(char *s,char *t,int pos), 在串s的位置pos-1和pos之间插入串t。假设分配给串s的空间足以插入串t。要求不使用任何字符串库函数。

#include <iostream>

using namespace std;
void Insert(char *s,char *t,int pos);
int main()
{
    char cp1[30]={"helloworld\0"};
    char cp2[]={"zhuzhiwen\0"};
    Insert(cp1,cp2,2);
    cout<<cp1<<endl;
    return 0;
}

void Insert(char *s,char *t,int pos)
{
    int slen=0,tlen=0;
    char *sp=s,*tp=t;
    while(*sp!='\0')
    {
        sp++;
        slen++;
    }
    cout<<"s strlen: "<<slen<<endl;
    while(*tp!='\0')
    {
        tp++;
        tlen++;
    }
    cout<<"t strlen: "<<tlen<<endl;
    if(pos<0||pos>slen)
    {
        cout<<"越界"<<endl;
    }
    else
    {
        for(int i=slen;i>=pos;i--)
        {
            s[i+tlen]=s[i];
        }
        for(int j=pos;j<pos+tlen;j++)
        {
            s[j]=*t++;
        }
    }
}

注意点:

1.在main函数中,字符串s与字符串t必须存储在数组中方能对其中的字符元素进行更改,如果如下所示用C风格字符串存储"helloworld",则该字符串已经初始化就无法更改。

*cp1="helloworld";

cp[1]='z'; //error

2.要时刻注意s和t后面的字符串终结符'\0'。


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


2. 题目:在string中统计出现的字符、字符个数和每个字符出现的次数。

/*
统计字符串中出现的字符、字符个数和每个字符出现的次数
**/

#include <iostream>
#include <cctype>
#include <cstring>
using namespace std;
void Count(char *ch,int &k,int num[]);
int main()
{
    char *cp="zhuzhiwen";
    int k=0;
    int num[26]={0};
    Count(cp,k,num);
    for(int i=0;i<26;i++)
    {
        if(num[i])
            cout<<"字母"<<(char)(i+97)<<"出现次数为:\n"<<num[i]<<'\n';
    }
    return 0;
}

void Count(char *ch,int &k,int num[])   //ch指向字符串首地址,k返回字符个数,num记录每个字符出现的次数
{
    k=0;
    while(*ch!='\0')
    {
        if(isalnum(*ch))
        {
            char c=tolower(*ch);
            if(!num[c-'a'])
            {
                k++;
            }
            num[c-'a']++;
            ch++;
        }
        else
        {
            cout<<"输入不是字母";
            return;
        }
    }
}


在这里着重要注意指针和引用的区别。


【欢迎读者交流批评指正~】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值