String 和 string 的区别是什么?

sundl2268 2010-02-08 09:32:44
我在MSDN上看到的是:
Platform SDK: Windows User Interface

String
The String structure depicts the organization of data in a file-version resource. It contains a string that describes a specific aspect of a file, for example, a file's version, its copyright notices, or its trademarks.

This structure is not a true C-language structure because it contains variable-length members. This structure was created solely to depict the organization of data in a version resource and does not appear in any of the header files shipped with the Microsoft® Platform Software Development Kit (SDK).

struct String {
WORD wLength;
WORD wValueLength;
WORD wType;
WCHAR szKey[];
WORD Padding[];
WORD Value[];
};
Members
wLength
Specifies the length, in bytes, of this String structure.
wValueLength
Specifies the size, in words, of the Value member.
wType
Specifies the type of data in the version resource. This member is 1 if the version resource contains text data and 0 if the version resource contains binary data.
szKey
Specifies an arbitrary Unicode string. The szKey member can be one or more of the following values. These values are guidelines only.


string
string
typedef basic_string<char> string; 这个定义是什么意思?? 告诉一下



关于String的n多方法怎么没有呢?
顺便请说一下:typedef basic_string<char> string; 怎么用?既然是C++的标准东西,我在C++Builder环境中用 string a;怎么提示没有定义呢?



...全文
116 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
老邓 2010-02-08
  • 打赏
  • 举报
回复
其实一些经典的库,都有自己封装的字符串操作类。
比如:wxWidgets有wxString,Qt有QString。
为什么会这样呢?

我想一个原因是不同编译器,对std::string的实现不一样。比如VC从7.1开始,就不再使用引用计数,而GCC一直在使用引用计数。

如果使用std::string的话,在跨编译器时会产生问题。
尤其是GCC的std::string,我也不爱用,因为线程不安全,陷阱太多。
老邓 2010-02-08
  • 打赏
  • 举报
回复
String只是一个结构体,上哪儿去找那些方法去?
这个只是用在一些特定场合。

std::string,需要命名空间std。
你要声明一下。

Windows下的MFC、ATL、WTL,普遍用CString这个模板类。
所以std::string用的不多。

lvp1984 2010-02-08
  • 打赏
  • 举报
回复
String 没用过,只知道string和CString
sundl2268 2010-02-08
  • 打赏
  • 举报
回复
标准C++库及STL还提供了通用数据结构:
字符串类string;向量类模板vector;双端队列类模板deque;链表类模板list;容器适配器堆栈类stack(实现先进后出的操作);容器适配器队列类queue(实现先进先出的操作);集合类set;多重集合类multiset;映射类map;多重映射类multimap;位集合bitset;迭代器iterator (类似指针的功能,对容器的内容进行访问)。

好像平时我们都没怎么用string??
liyoubaidu 2010-02-08
  • 打赏
  • 举报
回复
up 回复内容太短了!
老邓 2010-02-08
  • 打赏
  • 举报
回复
比如CString的构造函数,可以将ANSI字符串转化为Unicode字符串,这个非常方便。
而QString可以通过unicode()成员函数转换为Unicode等。
老邓 2010-02-08
  • 打赏
  • 举报
回复
引用 5 楼 sundl2268 的回复:
现在终于知道了各个经典类都是在 std::sting类基础上封装的。

是我表达的不够清楚。
各个经典字符串类都有自己的实现,并不是在std::string的基础上封装。
而std::string虽然是标准库的类,但不同编译器,实现不同。
所以,一般不为一些经典类库所采用。
周药师 2010-02-08
  • 打赏
  • 举报
回复
在C++Builder里
String 相當於VCL 里的AnsiString類型
string 就是C++標準里stl里的string類型
sundl2268 2010-02-08
  • 打赏
  • 举报
回复
引用 4 楼 loaden 的回复:
其实一些经典的库,都有自己封装的字符串操作类。
比如:wxWidgets有wxString,Qt有QString。
为什么会这样呢?

我想一个原因是不同编译器,对std::string的实现不一样。比如VC从7.1开始,就不再使用引用计数,而GCC一直在使用引用计数。

如果使用std::string的话,在跨编译器时会产生问题。
尤其是GCC的std::string,我也不爱用,因为线程不安全,陷阱太多。


谢谢 Loaden,听君一席话,胜读十本书。
现在终于知道了各个经典类都是在 std::sting类基础上封装的。只是各个实现方法不一样罢了。。。好的,谢谢你了loaden。
​ 博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌项目名称基于Web的酒店客房管理系统的设计与实现系统说明3.2.1  用户模块功能分析前台模块应主要包括用户登录模块、用户注册模块、查看客房信息模块、客房预定 模块、用户留言模块、充值模块和个人信息维护模块。用户登录模块:用户通过输入注册的的账号和密码,然后进行身份验证,匹配成功 后实现登录功能。用户注册模块:用户输入合法的账号和密码可以实现注册功能。 查看客房信息模块:用户可以通过首页查看客房的价格,图片,详情等信息,从而   可以选择想要预定的房间。 客房预定模块:用户选择自己想要预定的客房后,可以通过输入相关信息进行订房操作。用户留言模块:用户可以向管理员发送留言。 充值模块:用户可以通过添加银行卡再为自己进行充值操作。 个人信息维护模块:用户可以修改自己的姓名、密码、身份证号等信息,还可以查看自己的订单。3.2.2  管理员模块功能分析对于管理员而言,一个好的管理系统总是能让酒店的管理工作事半功倍[7]。管理员 能够通过这个系统对自己的酒店情况一目了然,应该包括客户留言模块、客房管理模 块、订房信息管理模块、入住信息管理模块、统计分析模块、酒店新闻管理模块、会 员信息管理模块、员工信息管理模块、系统用户管理模块、个人信息维护模块。客户留言模块:管理员可以查看并回复用户的留言。客房管理模块:管理员可以管理客房信息,可以添加新的客房,删除已经停用的客房信息,还可以修改现有的客房信息。订房信息管理模块:管理员可以处理用户的订房请求,为用户办理入住手续。入住信息管理模块:对于没有注册的线下客户,也可以办理入住手续。统计分析模块:可以对酒店所有的入住信息进行记录和总结分析。酒店新闻管理模块:管理员可以更新网站上的新闻公告,展示图片等信息。会员信息管理模块:管理员可以查看到所有的注册会员信息,可以对会员信息进行删除,修改,添加操作。员工信息管理模块:管理员可以查看到自己公司所有的员工信息,而且还可以对员工的相关信息进行管理。系统用户管理模块:管理员可以查看到所有的系统管理员信息并对管理员信息进行管理。个人信息维护模块:管理员可以更改自己的登录密码或者是姓名、性别、手机号等 相关个人信息。​编辑 环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本;6.是否Maven项目:否;技术栈1. 后端:Spring+SpringMVC+Mybatis2. 前端:JSP+CSS+JavaScript+jQuery使用说明1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;4. 运行项目,在浏览器中输入http://localhost:8080/ 登录运行截图​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑 用户管理控制层:package com.houserss.controller;import javax.servlet.http.HttpSession;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.houserss.common.Const;import com.houserss.common.Const.Role;import com.houserss.common.ServerResponse;import com.houserss.pojo.User;import com.houserss.service.IUserService;import com.houserss.service.impl.UserServiceImpl;import com.houserss.util.MD5Util;import com.houserss.util.TimeUtils;import com.houserss.vo.DeleteHouseVo;import com.houserss.vo.PageInfoVo;/** * Created by admin */@Controller@RequestMapping(/user/)public class UserController if (ip != null && ip.length() > 0) String[] ips = ip.split(,);for (int i = 0; i  

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧