c语言中读取及输出汉字的问题

c语言中读取及输出汉字的问题,第1张

为了方便文本文件的 *** 作,标准函数编程库提供了,行读写函数,

char gets(char s);

char fgets(char s, int n, FILE stream);

-----------------------精通unix下c语言编程与项目实践P66

行输出函数族

int puts(const char s);

int fputs(const char s, FILE stream);

-----------------------精通unix下c语言编程与项目实践P67

块读写函数

能够输入输出任意数量的字符,在 *** 作二进制文件时常常使用,

fread 和fwrite

块读写函数经常 *** 作二进制文件。

-----------------------精通unix下c语言编程与项目实践P70

再有就是编码的知识了

当你输出的ascii码在汉字的范围内的时候,汉字系统会认识到

然后把相应的ascii码变成汉字。

这个实现起来很麻烦,不过方法还是有的,你可以定义一个字符数组,前面第一第二个元素存汉字,后面第三个元素存首字母,当然,也可以向文件里面写入一块内容,包含汉字和首字母,如果考虑多音字的话,可以遍历链表或者文件,程序是永远没有止尽的,没有做不到,只有想不到这句话在编程中是最适合用的。

字符读写函数fgetc和fputc

字符读写函数是以字符(字节)为单位的读写函数。 每次可从文件读出或向文件写入一个字符。

1) 读字符函数fgetc

fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:

字符变量=fgetc(文件指针);

例如:

ch=fgetc(fp);

其意义是从打开的文件fp中读取一个字符并送入ch中。

对于fgetc函数的使用有以下几点说明:

在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。

读取字符的结果也可以不向字符变量赋值。例如:fgetc(fp); 但是读出的字符不能保存。

在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后,该位置指针将向后移动一个字节。 因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。

例13-1读入文件c1doc,在屏幕上输出。#include<stdioh>main(){ FILE fp; char ch; if((fp=fopen("d:\\jrzh\\example\\c1txt","rt"))==NULL){ printf("\nCannot open file strike any key exit!"); getch(); exit(1); } ch=fgetc(fp); while(ch!=EOF){ putchar(ch); ch=fgetc(fp); } fclose(fp);}

本例程序的功能是从文件中逐个读取字符,在屏幕上显示。程序定义了文件指针fp,以读文本文件方式打开文件“d:\\jrzh\\example\\ex1_1c”,并使fp指向该文件。如打开文件出错,给出提示并退出程序。程序第10行先读出一个字符,然后进入循环,只要读出的字符不是文件结束标志(每个文件末有一结束标志EOF)就把该字符显示在屏幕上,再读入下一字符。每读一次,文件内部的位置指针向后移动一个字符,文件结束时,该指针指向EOF。执行本程序将显示整个文件。

2) 写字符函数fputc

fputc函数的功能是把一个字符写入指定的文件中。函数调用的形式为:

fputc( 字符量, 文件指针 );

其中,待写入的字符量可以是字符常量或变量,例如:

fputc('a',fp);

其意义是把字符a写入fp所指向的文件中。

对于fputc函数的使用也要说明几点:

被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。

每写入一个字符,文件内部位置指针向后移动一个字节。

fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。

大多数情况下不可以的,用wchar_t就好了,wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,不等同于unicode编码。unicode编码的字符一般以wchar类型存储。char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。 wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU Libc规定wchar_t为32位[1],总之,wchar_t所能表示的字符数远超char型。 标准C++中的wprintf()函数以及iostream类库中的类和对象能提供wchar_t宽字符类型的相关 *** 作 ,例如#include <iostream> #include <stdlib> using namespace std; void main() { locale loc( "chs" );//定义“区域设置”为中文方式 wcoutimbue( loc );//载入中文字符输入方式 wchar_t str[]=L"中国";//定义宽字符数组,注意L是大写 wcout<<str<<endl;//显示宽字符数组,下同 wprintf(str); system("pause"); }

用一个for循环来遍历字符串中的内容然后比较是否为

aeiou

最后得出结果

以下是运用上面的前辈写的

哈哈

#include

"stdafxh"

#include"iostream"

using

namespace

std;

int

_tmain(int

argc,

_TCHAR

argv[])

{

char

str[]="a111a111e111i11o111u";

char

cpstr=str;

int

sum=0;

while(cpstr!='\0')

{

switch(cpstr)

{

case

'a':

case

'e':

case

'i':

case

'o':

case

'u':

sum++;//累加aeiou的个数

default:{

break;}

}

cpstr++;

}

cout<<sum;

return

0;

}

#include <stdioh>

int main(int argc, char const argv[])

{

    char line[1024] = "\0"; // <--- 最大1023个字符,可按需要修改

    int i;

    gets(line); // <--- 读入一行字符串,存入数组line中

    for (i = 0; i < sizeof(line); ++i) { // <-- 按字符逐个判断

        // a~z, A-Z, 才输出

        if ( (line[i] >= 'a' and line[i] <= 'z') ||

           (line[i] >= 'A' and line[i] <= 'Z') )

            printf("%c",line[i]);

    }

    printf("\n");

    return 0;

}

运行:

Cat808her_+in_+e87

Catherine

以上就是关于c语言中读取及输出汉字的问题全部的内容,包括:c语言中读取及输出汉字的问题、c语言中如何用字母去检索汉字名称 谢谢、c语言 怎么读文件中的汉字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10160132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存