一些关于cpp中字符串处理的问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 01:54:12
我比较菜,问题比较多,如果很好会有追加的!
谢谢大家帮助!

1、如果把一个中文字符,存入char数组,占两个位置,分别用(int)看时候,发现那些值都是负的,为什么??是不是所有中文字符存入后每一位都是负的。
2、如果要存并处理中文,用UNICODE的char,能举个例子么?
3、string类型的c_str()是一个固定不变的属性?用strcpy是不能拷贝到它里面的?y?
4、strtok函数返回的是一个指针。
比如char * a;
a = strtok(b,"a"); ---b为"bbbbc",那么就会返回一个指针
请问这个指针是指向b的头位,还是把b截断后存入另外一个内存空间再返回另一片空间的头位。
5、有没有这样的函数:遇到不是小写字母的第一个字截断,返回这是第几个字。
6、两个char数组指针,如何比较它们所指向的数组是否一样?
if (*p1==*p2)???

1:看一下汉字内码,一切都非常清楚啦
2:我个人觉得处理汉字和处理字符没有明显的区别(如果你是做嵌入式,操作液晶屏,可以要有一些区别)
3:c_str() 就是const_str的缩写,const的用法就不赘述啦!它返回指向字符串数据缓冲区的const指针。strcpy()函数,有一个指针自加的操作,因此是不能使用的。
4:char *strtok( char *strToken, const char *strDelimit ); 函数原型是这样的,"return a pointer to the next token found in strToken "(MSDN 2001) 我觉得这句话解释的非常清楚。
5:我觉得这个编写起来非常简单,就是数学比较问题。(‘a’-'A' = 32)
6:通常意义的解法就是用strcmp啦 用==号 这种是string类型重载了==方法使用的格式

1.存入unsigned char看就是正的了,因为汉字的2个字节都是用大于125的数表示的
2.用wchar_t,双字节字符类型或者用2个unsigned char来表示1个汉字
5.可以自己写一个这样的函数
6.用strcmp,返回0的话表示相等,返回非0表示不等

补充楼上:3,Y.因为c_str()返回一个const char *

1:ascii码是一个字节0-127,中文用两个字节表示,为了区别ascii码,首字节的第一位为1,所以你看到值是负的。
2:两个字节表示一个汉字。用双字节字符类型吧
3:是的。可以查看定义。c_str()返回的是const char*型的,所以不能strcpy.
4:没有看懂你的意思。strtok是直接在原字符串上修改的。不会存入另外的内存。
5:只有判断是不是大小写的函数。自己写吧。
6:你是比较是不是相当的字符还是看是不是一个数组?后者直接比较地址,前者你写的那个直接==是不行的,这样的话判断只是一个字符即首字符是否相等。用strcmp。