zoukankan      html  css  js  c++  java
  • 文本处理中的小细节

    1.char还是uchar(unsigned char)

      char在C/C++中占用1byte(即8bits)。

      ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。标准ASCII码是7位二进制表示,表示128个字符(0~127),最高位是0。如 00110000(2) =48D=30H='0'。

      由于char能表示的范围是(-128~127),英文中使用了0~127号编码的字符(符号位为0,正数)。一个汉字占2byte,为了使得汉字的两个字节不与英文字母混淆,表示汉字的每个字节符号位都为1(负数)。

      在处理文本时,最好使用unsigned char(0~256),因为文本中可能会有含有特殊字符(不一定是标准ASCII),也就是读入的每个字符的ASCII码可能不在0~127之间。

      下面的程序输出字符的ASCII码:

     1 #include <iostream>
     2 using namespace std;
     3 int main ()
     4 {
     5     string str ("hi你好");    ///6个字节,每个中文占2个字节
     6     cout<<"Text:"<<str<<endl;
     7     for(int i=0;i<str.size();i++)
     8         printf("i=%d    c_c=%c      c_d=%d
    ",i,str[i],(unsigned char)str[i]);
     9     return 0;
    10 }

    2.换行符号

      win和linux下面的换行符号不同。win下面的换行符是“ ”,linux下面的换行符是“ ”。

      使用下面的程序读取文件中的每一行并显示长度:

     1 #include <fstream>
     2 #include <iostream>
     3 #include <string>
     4 
     5 using namespace std;
     6 int main(int argc,char* argv[]){
     7     fstream fin(argv[1]);  ///参数为文件名
     8     string readline;
     9     while(getline(fin,readline)){  ///逐行读取,直到结束
    10         cout<<readline<<"	"<<readline.size()<<endl;
    11     }
    12     fin.close();
    13     return  0;
    14 }

     (1)win下面建立文件a_win.txt,在linux下面打开正常

      分别在win、linux下执行结果如下,可以看出长度差1(就是最后的“ ”):

      (2)linux下面建立文件a_unix.txt,在win下面打开没有换行

      分别在win、linux下执行结果如下,可以看出长度相同:

     

      可见,win和linux程序都可以识别' '为换行符。win下会多一个字符‘ ’。

  • 相关阅读:
    作为一枚第二天上班的小小.net程序员(技术宅的那种)很迷茫哦,第一个随笔
    清除NT Kernel & System占用80端口
    case then 的用法 貌似case then不支持别名
    syscomments 可以用来查找所有关于库中用到的某个关键词的所有相关脚本
    查看系统表存储过程名称SELECT *,OBJECT_NAME(id) FROM syscomments
    毫秒级百万数据分页存储过程
    使用sp_configure启用 'Ad Hoc Distributed Queries'
    使用 ServKit(PHPnow) 搭建 PHP 环境[图]
    apache+php+mysql常见集成环境安装包
    Quartz.NET作业调度框架详解
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/3645651.html
Copyright © 2011-2022 走看看