标题:关于sizeof()和string的c_str()和length()函数,给像我一样的初学者,有兴趣 ...
取消只看楼主
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
 问题点数:0 回复次数:5 
关于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
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.661733 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved