string类型的宽字符版怎么写?

Dic4000 2007-11-26 08:18:04
听说C++中string类实际上是一个模板类,一般用string s="abcd";里面存储的字符类型默认是char型,我想使它默认的存储类型变为wchar_t,我应该怎么做?

请看下面的程序:

#include<iostream>
#include<cstdlib>
#include<string>

using namespace std;

int main(int argc, char *argv[])
{
string s1("a你c好d");

cout<<"s1="<<s1<<"\tlength="<<s1.length()<<endl;
for(int i=0;i<s1.length();++i) cout<<i<<":"<<s1[i]<<' ';

system("PAUSE");
return EXIT_SUCCESS;
}



结果为:
s1=a你c好d length=7
0:a 1:?2:?3:c 4:?5:?6:d

我想如果把string 的默认存储类型改为wchar_t,输出的length会不会是5?程序应该怎么改写?
对于cout<<s1[1]<<s2[3];这个语句,输出能显示:"你好"吗?应该怎么做?
...全文
1029 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
guolihui112 2007-12-03
  • 打赏
  • 举报
回复
wstring
Dic4000 2007-12-02
  • 打赏
  • 举报
回复

basic_ostream<wchar_t,char_traits<wchar_t> > wcouts;


尝试写了上面这个定义,但在dev和vs2005下都报错,模板的第2个参数不知道该怎么写,等待高人~~~~~
xalangying 2007-12-01
  • 打赏
  • 举报
回复
如果wcout不是标准的,用现有的模板,怎么用typedef定义与wcout有同样功能的对象?
----
关注这个
首先有谁知道怎么用标准的c++来实现 wstring 到 string 的转换吗,能实现这个转换就差不多了,毕竟我们可以输出 cout<<string("中国人");
visame 2007-12-01
  • 打赏
  • 举报
回复
关注中!
Dic4000 2007-11-29
  • 打赏
  • 举报
回复
如果wcout不是标准的,用现有的模板,怎么用typedef定义与wcout有同样功能的对象?
HelloDan 2007-11-28
  • 打赏
  • 举报
回复
原来是这样,那算了,以后有空再补学下。Thanks
HelloDan 2007-11-27
  • 打赏
  • 举报
回复
关注,明天再看,想学下。

3楼的也不行啊。
effective_person 2007-11-27
  • 打赏
  • 举报
回复
wcout < <s1[1] < <s1[3] < <endl;
wcout < <i < <":" < <s1[i] < <' ';//
输出要加以区分
cout<<i<<":";
wcout<<&s[1];//这样是第2个以后的地址的内容
Dic4000 2007-11-27
  • 打赏
  • 举报
回复
在vs2005下编译,还是有些问题:
wstring s1(L"a你c好d");
cout<<s1.length()<<endl;//这个可以,输出5

wcout<<s1[1]<<s1[3]<<endl;//这个输出不了汉字,是奇怪的数字
for(int i=0;i<s1.length();++i) wcout<<i<<":"<<s1[i]<<' ';//这个只能输出两项,输出的第二项是空白.



在dev-C++下编译运行,wstring s1(L"a你c好d");编译报错,但如果里面没有汉字则可以通过编译.并且这个环境下也没有wcout这个对象.
请问怎么解决上述的两个问题?
cangwu_lee 2007-11-27
  • 打赏
  • 举报
回复
奇怪!
bcc 55 + Code::Blocks 編譯沒有問題,但得到的結果卻是:
Abnormal program termination





#include<iostream>
#include<string>

using namespace std;

int main(int argc, char *argv[]) {
wstring s1=L"你好";
wcout.imbue(locale("chs"));
wcout<<s1.c_str()<<endl;
system("pause");
return 0;
}


xalangying 2007-11-27
  • 打赏
  • 举报
回复
我用的是vc6
wcout不是标准的,好像g++是不支持的
HelloDan 2007-11-27
  • 打赏
  • 举报
回复

--------------------Configuration: space - Debug--------------------
Compiling...
xmission.cpp
xmission.cpp:9:16: converting to execution character set: Illegal byte sequence
xmission.cpp: In function `int main()':
xmission.cpp:10: error: `wcout' undeclared (first use this function)
xmission.cpp:10: error: (Each undeclared identifier is reported only once for each function it appears in.)

xmission.o - 3 error(s), 0 warning(s)



还是不行,你用什么编译器的,建的是什么工程?我用DEV-C++和MinGW都不行。我没装到VC
xalangying 2007-11-27
  • 打赏
  • 举报
回复
#include<iostream>
#include<string>
using namespace std;
int main(int argc, char *argv[])
{
wstring s1=L"你好";
wcout.imbue(locale("chs"));
wcout<<s1.c_str()<<endl;
return 0;
}


这样就行的了,
注意使用wcout输出前先写一句 wcout.imbue(locale("chs"));一次就行了
effective_person 2007-11-26
  • 打赏
  • 举报
回复
可使用
wstring 和wcout


#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
int main(int argc, char *argv[])
{
wstring s1=L"a你b好c";
std::wcout.imbue(std::locale("chs"));
wcout<<s1.c_str()<<endl;
std::wcout.imbue(std::locale("chs"));
cout<<"s1=";
std::wcout.imbue(std::locale("chs"));
wcout<<s1<<endl;
cout<<"length="<<s1.length()<<endl;
for(int i=0;i<s1.length();++i)
{
cout<<i<<":";
std::wcout.imbue(std::locale("chs"));
wcout<<&s1[i];
cout<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}



要实现只出现"你好"挺难的!等待高人
batistawjp 2007-11-26
  • 打赏
  • 举报
回复
wstring
weiym 2007-11-26
  • 打赏
  • 举报
回复
wstring s1(L"a你c好d");
wcout << s1.length();

65,211

社区成员

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

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