关于程序设计的两个简单问题(C\C++)

来源:百度知道 编辑:UC知道 时间:2024/05/06 05:03:24
1. 如何处理汉字字符
例如
char word[10],* p=word;
gets(word); //我输入"你好"
if(*p=='你' && *(p+2)=='好' )
cout <<"你也好";
编译器说 不匹配,比较结果总是false.
该怎么改?

2.文件处理时
用fgetc()时,用一次就跳到文件下一个字符的位置,
可我要它倒着跳,就是不用一次就跳到文件上一个字符的位置,
怎么办??

第一个问题:汉字的“你”占了两个字节,当然不是一个简单的字符char了,那个*p只有一个字节而已。我觉得是不是可以使用strncmp(p, "你", 2) == 0;
strcmp(p+2, "好") == 0;这样来判断看看。
从你的p+2也看出你知道“你”占了两个字节,无疑无法跟一个字节相等了。
第二个问题:使用fseek可以实现前跳。对文件读取必然是读一次,指针前移,使用fseek(f, -1, SEEK_CUR)可以在当前位置跳到上一个字符开始处,即刚读取那个字符的位置。fseek的用法百度。

1、这位人士你好,当我看了你的问题后我不禁惊讶!第一,为什么你要用“==”这么去判断一个字符串,第二,本来“你好”是一个字符串你有必要讲他分开来判断吗?而且你就算将它分开判断的话那一个“你”字和一个“好”字也不是一个字符,而是字符串,你不能将一个字符串用单引号括起来,如果你要改的话你直接判断就可以了用if(!strcmp(word,"你好")) cout<<"你也好";
2、这是你提到文件操作,本来这个fgetc()读一个字符就会向后移动一个字节,你想改变它的约定是不可以的,你要想其它的办法使他向前移动,文件指针移动是有特定的函数的fseek();具体怎么用你去看书吧,书上一般只会讲怎么移动都是向后移动的,如果你想向前移动的话你只要把移动的那个参数改成负数就可以向前移动了!祝你学习进步!