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;
}
}
}
在这里着重要注意指针和引用的区别。
【欢迎读者交流批评指正~】