c++读入之 -- 汉字读入遇到的问题

本文探讨了使用C++读取并处理汉字的技术,包括使用wchar_t字符类型,通过cin和cout实现汉字输入输出的优化,以及利用string类的便捷性。文章还介绍了如何禁用cin与stdin的同步,以提高输入速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好吧,课题和汉语处理有关,于是就要求用c++来读入汉字进行处理。

首先使用wchar_t字符即宽字符,然后这样定义:

 

 1 #include <cstdio>
 2 #include <cwchar>
 3 
 4 using namespace std;
 5 
 6 int main() {
 7     wchar_t* ch;
 8     scanf("%S", ch);
 9     printf("%S", ch);
10     return 0;
11 }
View Code

然后结果是什么呢?没输出、、、

于是我们改一改:

 

 1 #include <cstdio>
 2 #include <cwchar>
 3 
 4 using namespace std;
 5 
 6 int main() {
 7     wchar_t ch;
 8     ch = getwchar();
 9     printf("%C", ch);
10     return 0;
11 }
View Code

还是没有输出。我试着改成了"printf("%d", ch);",于是输出了-1

这表明,即使是宽字符,也是按照char的宽度读进去的,也即,wchar_t是一个至少到现在没什么大用处的字符类型?

 怎么办呢?czr大爷告诉我其实可以这样写:

 

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 int main() {
 7     string st;
 8     cin >> st;
 9     cout << st << endl;
10     return 0;
11 }
View Code

string类里实现了写高端的东西,反正就是可以读入输出中文。

然后我表示不爽。。因为cin、cout太慢了,于是我们想到了一些奇怪的东西:

 

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 int main() {
 8     ios::sync_with_stdio(false);
 9     string st;
10     cin >> st;
11     cout << st << endl;
12     return 0;
13 }
View Code

上面程序的line 8是新加上去的一句话,"std::ios::sync_with_stdio(false);",只要这句话,cin就和scanf的速度相差无几了。
"cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);,这样就可以取消cin于stdin的同步了。" -- by byvoid

 

于是用c++读入中文这件破事终于是搞定了。顺带一提,表示从来用char*的窝又要去学过度封装的string类的操作了2333

转载于:https://www.cnblogs.com/rausen/p/4147843.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值