C++实验10

一、复制字符串

#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应理解为一变量,需要引用传递,不是字符数组。
}
发布了45 篇原创文章 · 获赞 5 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章