C++ 字符数组的拷贝、拼接、逆序输出 函数的实现

code blocks解决中文乱码问题:settings→compiler and debugger→compiler settings→other options→粘贴一条: -fexec-charset=GBK -finput-charset=UTF-8 →OK→

→ rebuild → yes




1,读取字符数组输入,并显示


#include <iostream>
#include <string.h>
using namespace std;


int main()
{
    int i,l;
    char c[50];
    /*字符指针(char *a)和字符数组(char a[])的区别:字符指针存放的是一个字符串常量的首地址,即指向字符串的首地址,它是一个变量,
可以改变a使它指向不同的字符串,但一旦用类似char *a="hello";的形式定义了a所指的字符串常量,就不能改变。a[]是一个数组,可以改变数组中保存的内容。*/
    char *p;
    p=c;
    cout<<"输入:";
    cin>>c;
    l=strlen(c);
    cout<<l<<endl;//输出字符数组实际长度
    for(i=0;i<l;i++)
    {
        cout<<*(p+i);
    }
    cout<<endl;
    return 0;
}




2,读取字符数组输入,并拷贝到另一字符数组,输出显示


#include <iostream>
using namespace std;

void strcpyy(char *strDest,char *strSrc)
        {
                while( *strSrc!='\0')
                 {
                    *strDest= *strSrc;
                    strDest++;
                    strSrc++;
                 }
                 *strDest=0;
        }

int main()
{
    char a[10],b[10];
/*给字符串(数组)定义长度时,首先要确定待存储的数据的最大可能长度
    ,根据该长度进行数组长度定义。实际长度减一,因为有结束符 \0 */
    /* 如果写成 char *c1 = "abc"; 则是在文字常量区分配了一块内存放"abc",
    然后在栈上分配一地址给c1并指向这块地址,如果改变常量"abc"就会导致崩溃*/
    cout<<"please input string1:"<<endl;
    cin>>a;
    cout<<"string1="<<a<<endl;
    strcpyy(b,a);
    cout<<"string1 is copied to string2"<<endl<<"string2="<<b<<endl;
    return 0;
}





3,字符数组拼接

3.1 简单拼接(字面值的连接)


#include <iostream>
using namespace std;

int main()
{
    cout << "string1 " "string2"<< endl;
    return 0;
}


3.2 读取输入的两个字符数组,并连接,输出显示拼接完成的字符数组

#include<iostream>
#include<string.h>
using namespace std;

int main()
{
 char a[50],b[50],c[100];//同时定义三个字符数组
 char *p1,*p2,*p3;//定义三个字符指针
 int i,j,I,J;
 cout<<"输入字符数组a:";
 cin>>a;
 I=strlen(a);
 p1=a;
 for(i=0;i<I;i++)//这句让i从0遍历到I-1,I的值是字符数组中字符个数,不包括结束符。
 //结束符 \0 在 a[49] 的位置。除非输入了49个字符,否则它不在所输入字符长度+1的位置
  {
     cout<<*(p1+i);
  }
 cout<<endl;

 cout<<"输入字符数组b:";
 cin>>b;
 J=strlen(b);
 p2=b;
 for(i=0;i<J;i++)
  {
     cout<<*(p2+i);
  }
 cout<<endl;

 p3=c;

 for(i=0;i<I;i++)// i从0到I-1
 {
  *(p3+i)=*p1;
  p1++;
 }

 for(j=0;j<J;j++)//j从0到J-1
 {
  *(p3+I+j)=*p2; //已经读入了a中的字符,继续读入b中的字符,指针要从c[I]的位置开始,所以是*(p3+I+j)
   p2++;
 }

 cout<<"拼接后的字符数组";
 for(i=0;i<I+J;i++)
 {
     cout<<*(p3+i);
 }
 cout<<endl;
 return 0;
}




4,字符数组反转


#include <iostream>
#include <string.h>
using namespace std;


int main()
{
    int i,l;
    char c[50];
    char *p;
    p=c;
    cout<<"输入:";
    cin>>c;
    l=strlen(c);
    cout<<l<<endl;
    for(i=0;i<l;i++)
    {
        cout<<*(p+l-1-i);
    }
    cout<<endl;
    return 0;
}


PS:字符串和字符数组的区别:

唯一的区别就是字符串末尾有一个'\0'
面字符数组是没有的. 

char ch1[]="hello";//该串有6个字符,5个可见字符,因为是串,所以末尾自动加上'\0';共六个
char ch2[]={'h','e','l','l','o'};//这样写就成了数组.是确确实实的5个字符

摘自百度知道




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值