标题:关于sizeof()和string的c_str()和length()函数,给像我一样的初学者,有兴趣 ...
只看楼主
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
 问题点数:0 回复次数:7 
关于sizeof()和string的c_str()和length()函数,给像我一样的初学者,有兴趣的看一眼
sizeof()是求某种系统自带类型数据 或用户自定义类的大小的函数
比如:
int i;
double d;
则,在我的机器上,sizeof(i)和sizeof(int)的值都是4
sizeof(d)和sizeof(double)的值都是8

由于字符串应用频繁,所以系统有定义好的string类,使用起来很方便
但是如果你试一下:
string s1 = "I AM CHINESE, I LOVE MY COUNTRY ,I LOVE MY PEOPLE";
string s2 = "I AM PROUD OF IT";
则sizeof(string),sizeof(s1),sizeof(s2),它们的值都是16
如果你不明白,只要看一下string类的定义,你就明白了。因为你用sizeof(string),它的结果是string类里的所有
数据成员所占空间之和。string类里有一个指针,指向一片内存空间的首地址,那里才存放你的字符串。字符串不是
放在string类里面的,string累里只有指向该内存的指针。

string类有好多成员函数,比如length(),是用来返回字符串的长度的
string s = "fajlksdjflkjsdkl”;
s.length();
还有c_str(),很有用,是返回string对象的首地址,返回类型是 const char *。
这就是我的第一篇帖子啦,见笑了。
搜索更多相关主题的帖子: str length 函数 sizeof 
2008-11-21 09:04
hitcolder
Rank: 1
等 级:新手上路
威 望:1
帖 子:124
专家分:0
注 册:2008-10-28
得分:0 
学习中,对新手确实很有帮助,谢谢楼主

不要在你的智慧中夹杂傲慢,也不要使你们的谦卑缺乏智慧的成分。
2008-11-21 09:39
asd6791868
Rank: 1
来 自:逆流
等 级:新手上路
帖 子:362
专家分:7
注 册:2008-7-27
得分:0 
我正好对c_str(), 不怎么了解 楼主继续啊

─條路 :  ┈片天  ┈個人  ─瞬間:
2008-11-21 15:18
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
得分:0 
感谢大家的关注,人要不断学习,才能进步
一起努力吧

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-21 17:38
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
得分:0 
c_str()的一个简单应用如下:
#include <iostream>
#include <string>
using namespace std;

void show(string src)
{
    const char* s_pointer = src.c_str();
    cout << s_pointer << endl;
}

int main()
{
    string s1 = "Where Is China.";
    show(s1, A1);
    return 0;
}

打印结构就是:"Where Is China"

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-22 12:44
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
得分:0 
上面有些地方打错字了,应该是:
#include <iostream>
#include <string>
using namespace std;

void show(string src)
{
    const char* s_pointer = src.c_str();
    cout << s_pointer << endl;
}

int main()
{
    string s1 = "Where Is China.";
    show(s1);
    return 0;
}

打印结果就是:"Where Is China"

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-22 13:07
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
得分:0 
另一个算是c_str()的应用吧:
#include <iostream>
#include <string>
#include <vector>
using namespace std;

//下面这个函数用来把一个字符串倒置,并放存在一个字符数组里
void change(string src, vector<char> &dest)//vector是一个容器类,能够自动扩展存储空间
{
    const char* s_pointer = src.c_str(); //指向末字符
    for(int i = 0; i < src.length(); i++)
    {
        dest.push_back(s_pointer[src.length() - 1 - i]);
    }
    dest.push_back('\0');
}
//测试一下上面的函数是否好使
int main()
{
    vector<char> v1;
    string s1 = "abcdefghijklmn";
    change(s1, v1);
    for(int i = 0; v1[i] != '\0'; i++)
    {
        cout << v1[i];
    }
    cout << endl;
    return 0;
}
//在我的机器上,输出结果为nmlkjiggfedcba

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-22 13:53
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
得分:0 
噢,上面最后一行有一个g应该是h

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-22 13:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-245504-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.717881 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved