一、复制字符串
#include<iostream>
#include<string.h>
using namespace std;
void main()
{
char a[10],b[10];
cout<<"请输入第一个字符串:\n";
cin.getline(a,10);
cout<<"请输入第二个字符串:\n";
cin.getline(b,10);
cout<<"1号字符串:"<<a<<'\n';
cout<<"2号字符串:"<<b<<'\n';
int i;
for(i=0;b[i];)
a[i]=b[i++];
a[i]=b[i]; //补结束符
// 上述字符串从b赋值到a也可用strcpy(a,b);
cout<<"1号字符串:"<<a<<'\n';
cout<<"2号字符串:"<<b<<'\n';
}
二、连接字符串
#include<iostream>
using namespace std;
#include<string.h>
void getchar(char a[])
{
static int n=1;
cout<<"请输入第"<<n<<"个字符串:\n";
cin.getline(a,13);
//13为CR的ASCII码,实际默认的也是ENTER
n++;
}
void main()
{
char a[20],b[10];
getchar(a);
getchar(b);
cout<<"a:"<<a<<'\n';
cout<<"b:"<<b<<'\n';
strcat(a,b);
/*或者
int i=0,j=0;
while(a[i++]); //获得a的字符串结束符位置。
i--; //此时i已到结束符的后一位,故i--
while(b[j])
a[i++]=b[j++];
a[i]=0;
*/
cout<<"拼接后a:"<<a<<endl;
}
三、相同字符串删除
#include<iostream>
using namespace std;
#include<string.h>
int del_samechar(char []);
void main()
{
char a[20];
cout<<"请输入需要输出的数组:\n";
cin.getline(a,20);
cout<<"删除了相同的"<<del_samechar(a)<<"个字符\n";
cout<<a;
}
int del_samechar(char a[])
{
int len,n=0;
len=strlen(a);
//这个bug找了好久,前面输出对,后面出现问题,一定是字符边界有问题。
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
{
if(a[i]==a[j])
{
for(int k=j;k<=len;k++)
a[k]=a[k+1];
len=strlen(a);
i=-1; //让循环回到初始状态的方法
n++;
break;
}
}
}
return n;
}
以上方法较为麻烦,可使用string类来处理字符串
#include<iostream>
using namespace std;
#include<string>
int delete_same(string s)
{
int n=0;
int len=s.size();
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
if(s[i]==s[j])
{
s.erase(j,1);
n++;
i=-1;
len=s.size();
break; //忘掉,i=-1,字符数组越界
}
}
cout<<s<<endl;
return n;
}
void main()
{
string s;
cout<<"请输如需要检查的字符:\n";
cin>>s;
cout<<"删除了"<<delete_same(s)<<"个字符\n";
cout<<s;
//需要注意的是,此时由string定义的s应理解为一变量,需要引用传递,不是字符数组。
}