C++中字符数组与字符串 赋值问题

问题:写一个函数将一个字符串按反序存放。在主函数中输入一个字符串,通过调用该函数,得到该字符串按反序存放后的字符串,并输出。

string c=”asd”;

char c1[]=c;//编译不通过,不存在赋值规则

但字符数组可以给字符串变量赋值 如:

char c[]=”asd”;

string c1=c;

求字符数组长度 引用—>

 

常见的数组就是字符数组和整型数组,今天给大家介绍两种求数组长度的方法。

一.、sizeof函数

 同个这个函数可以求得这两种类型的数组的长度。

 首先sizeof的功能是返回一个对象或者类型所占的内存字节数。

所以我们可以通过以下代码来获取数组的长度

sizeof(数组名)/sizeof(数组类型)                                                                                     
int arr[] = {1,2,3,4,5};
char c[] = “hello world”;
printf(“%d”,sizeof(arr)/sizeof(int));
printf(“%d”,sizeof(c)/sizeof(char));
 通过上述的方式我们可以类比到任何求数组长度的地方上去,除此之外,有两点需要注意。
1. 通过上述方式求得字符数组的长度总是比我们想得到的多了一,是因为字符数组在最后一位默认有一个\0的空字符,

 所以比我们想象中的大了一,还要说的是\0 的作用就是标记结束,当我们使用printf 或者是puts 函数将字符数据进行输出

的时候,就是通过末位的\0来标记结束的, 如果没有\0 的话,输出结果的末尾会是乱码,所以在声明数组的时候我们需要

将数组的大小声明比我们需要的大一位, 我们使用scanf或者是gets 函数它们会默认在最后一位填上\0。

  2. 上述的这个方法不适用与将数组传到函数中,在函数中使用此方法求数组的长度,结果是错误的。

不妨大家可以试试以下代码

                                                                                                                 
#include<iostream>
using namespace std;
template <typename T>
int getArrayLength(T arr[]) {
    int length = sizeof(arr)/sizeof(T);
    return length;
}
int main() {
    int arr[] = {1,2,3,4,5};
    char c[] = “hello world”;
    printf(“%d\n”,sizeof(arr)/sizeof(int));
    printf(“%d\n”,sizeof(c)/sizeof(char));
    printf(“%d\n”,getArrayLength(arr));
    printf(“%d\n”,getArrayLength(c));
    return 0;
}

二、strlen
strlen函数只适用于求字符数组的长度,而且他返回的是第一个\0之前的字符长度,不需要考虑\0

另外使用strlen函数需要引入string.h头文件

代码如下

                                                                                                    
#include<iostream>
#include<string.h>
using namespace std;
template <typename T>
int getArrayLength(T arr[]) {
    int length = sizeof(arr)/sizeof(T);
    return length;
}
int main() {
    int arr[] = {1,2,3,4,5};
    char c[] = “hello world”;
    printf(“%d\n”,sizeof(arr)/sizeof(int));
    printf(“%d\n”,sizeof(c)/sizeof(char));
    printf(“%d\n”,strlen(c));
    return 0;
}

 综上所述,如果相求int类型的数组推荐使用sizeof来求,对于求字符数组推荐使用strlen来求
——————— 
作者:看见我请让我滚去学习 
来源:CSDN 
原文:https://blog.csdn.net/coderma4k/article/details/79184703 
版权声明:本文为博主原创文章,转载请附上博文链接!

贴代码如下 有错误请指正

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
void reverse(string c1,int n1){
    for(int i=n1-1;i>=0;i–)
        cout<<c1[i]; //可以对字符串变量中某个位置字符操作
}
int main(){
    string c;
    int n;
    char c3[100];
    gets(c3);
    c=c3;//字符数组赋值给字符串变量  通过
    n=strlen(c3);
    reverse(c,n);
    return 0;
}

    原文作者:hyeves
    原文地址: https://blog.csdn.net/choutankou9711/article/details/87915065
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞