精华内容
下载资源
问答
  • 最近在完成数据结构作业,在代码过程中经常遇到一些小问题,比如在输出字符串数组时,在一串自己想要的字符后面经常会出现一些不知名的汉字乱码。 (这段代码是去除字符数组里面重复数组元素) #include "header....

    最近在完成数据结构作业,在代码过程中经常遇到一些小问题,比如在输出字符串数组时,在一串自己想要的字符后面经常会出现一些不知名的汉字乱码。

    (这段代码是去除字符数组里面重复数组元素)

    #include "header.h"
    extern int CountLength(char name[],int len);
    
    int DealArray(char num[]){
    	printf("你输入的逻辑表达式的操作数(去除重复操作数):");
    int v=0;
    int g=CountLength(num,v);
    int i,j,k,L;
    	
    for(i=0;i<g;i++)    //冒泡循环
    {
        for(j=i+1;j<g;j++)
        {
            if(num[j]==num[i])    //如果发现重复
            {
                for(k=j+1;k<g;k++)
                {
                    num[k-1]=num[k];    //将后面的数依次赋值给前一个位置
                }
                g--;    //数组长度-1
                j--;    //重复点再次进行查重
            }
        }
    }
    
    for(L=0;L<g;L++){
    printf("%c",num[L]);
    }
    printf("\n");
    
    return OK;
    }
    
    int main(){
    	char n[]={'B','B','B','B','D','E'};
    DealArray(n);
    }
    
    
    

    运行结果:

    你输入的逻辑表达式的操作数(去除重复操作数):BDE虁

    解决方法是在数组后面加一个'\0',数组结束符号

    如果是在测试的话,在你自己输入的数组后面加一个'\0'数组元素

    int main(){
    	char n[]={'B','B','B','B','D','E','\0'};
    DealArray(n);
    }

    如果是用for循环为数组赋值的话,记得在for循环结束后,为最后一个数组元素赋值'\0'

    for(i=0;i<g;i++)    //冒泡循环
    {
        for(j=i+1;j<g;j++)
        {
            if(num[j]==num[i])    //如果发现重复
            {
                for(k=j+1;k<g;k++)
                {
                    num[k-1]=num[k];    //将后面的数依次赋值给前一个位置
                }
                g--;    //数组长度-1
                j--;    //重复点再次进行查重
            }
        }
    }
    num[g]='\0';

     

    展开全文
  • C语言数组输入汉字

    千次阅读 2018-12-20 13:43:55
    #include&amp;amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;amp;gt; int main() { char name[4]={&amp;amp;amp;amp;amp;amp;amp;quot;刘备&amp;...%s&am
    #include<stdio.h>
    int main()
    {
    	char name[7]={"刘备"};
    	printf("%s",name); 
     } 
    
    展开全文
  • “福”字倒着贴,寓意“福到”。不论到底算不算民俗,本...输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或...

    “福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。
    输入格式:

    输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。
    输出格式:

    输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。
    输入样例 1:

    $ 9
    @ @@@@@
    @@@ @@@
    @ @ @
    @@@ @@@
    @@@ @@@@@
    @@@ @ @ @
    @@@ @@@@@
    @ @ @ @
    @ @@@@@
    输出样例 1:

    $$$KaTeX parse error: Can't use function '$' in math mode at position 3: $̲ $ $ $ $ $ $
    $ $ $ $ $ $
    $ $
    $ $ $
    $ $
    $$$$$ $
    输入样例 2:

    & 3
    @@@
    @
    @@@
    输出样例 2:

    bu yong dao le
    &&&
    &
    &&&

    #include<stdio.h>
    int main()
    {	
    	int N,i,j,q;
    	char former[100][100];//原数组
    	char later[100][100];//置换后
    	char ch = getchar();
    	scanf("%d",&N);
    	getchar();//吃回车
    	for(i=0;i<N;i++)//赋初值
    	{
    		for(j=0;j<N;j++)
    		{
    		scanf("%c",&former[i][j]);
    		if(former[i][j]!=' ')
    		{
    			later[N-1-i][N-1-j] = ch;//顺便给置换后的数组赋值
    		}
    		else
    		later[N-1-i][N-1-j]=' ';
    		}
    		getchar();//吃每行末的空格
    	}
    	if(N%2)//分奇偶讨论图像是否关于原点对称
    	{	q=1;//奇数最中间的默认为一个相等
    		for(i=0;i<N/2;i++)
    		{
    			for(j=0;j<N;j++)
    			{
    				if(former[i][j]==former[N-1-i][N-1-j])
    			q=q+2;//相等,表示两个相等,+2
    			}
    		}
    		for(j=0;j<N/2;j++)
    		{
    			if(former[N/2][j]==former[N/2][N-1-j])//中间行的判断
    			q=q+2;
    		}
    	}
    	else
    	{	q=0;//偶数没有最中间的值
    		for(i=0;i<N/2;i++)
    		{
    			for(j=0;j<N;j++)
    			{
    				if(former[i][j]==former[N-1-i][N-1-j])
    				q=q+2;
    			}
    		}
    	}
    	if(q==N*N)//是否中心对称
    	printf("bu yong dao le\n");
    	for(i=0;i<N;i++)
    	{
    		for(j=0;j<N;j++)
    		{
    			printf("%c",later[i][j]);
    		}
    		printf("\n");
    	}
    }
    

    这个是正确的代码,之前的代码自己运行看上去是对的,后来改成了,原数组不为空格,赋值给后数组,原数组为空格时,赋给后数组空格字符。
    此处引出我的问题
    字符数组没赋初值的ASCII码为多少,
    空格为多少,是否和NULL相等

    #include<stdio.h>
    int main()
    {
    
    int b;
    int a[10];
    char c[5];
    printf("%d ",a[0]);
    printf("%d ",a[3]);
    printf("%d ",c[0]) ;
    printf("%d ",b);
    printf("%d ",' ');
    }
    

    结果为-1 0 0 0 32
    字符数组没赋初值的码为0——NULL;
    空格为32;
    虽然显示都一样但是本质不一样,以后再题目中要注意。

    展开全文
  • - 小白尝试使用c语言实现转化阿拉伯数字到大写汉字 - 我想分两步走,第一步算出几位数字没问题, 第二部通过取余数分别取出个十百千位数字 - 取余数失败, position数组中所有赋值都是零 - 我看了一晚上也没研究明白...
  • 前几天看到一道统计输入文本中的文字的数目的题,一开始以为是统计英文,后来才发现是统计中文汉字的数目(毕竟统计英文字母这种事,咱也会),原题如下: 题目上有两个要求:输入、统计 以C语言为例: 要求一:...

    前几天看到一道统计输入文本中的文字的数目的题,一开始以为是统计英文,后来才发现是统计中文汉字的数目(毕竟统计英文字母这种事,咱也会),原题如下:

    在这里插入图片描述

    题目上有两个要求:输入统计

    以C语言为例:

    要求一:输入一页文字(so easy , man),采用数组存储,fgets()函数输入。

    要求二:其实统计数字和空格很简单,因为数字和空格都可以由一个字节来表示,如果这个字节的ASCII码在数字的ASCII码范围中或者等于空格,结果就很明确了。

    关键是统计文字。

    我们平时使用的是全角字符,大家都知道,半角字符几乎都能用一个ASCII码表示,但是汉字却不能,它需要使用两个或者多个字节才能正确表示。一个汉字跟全角字符在内存中存储的时候占两个字节,强行把这每一个字节当ASCII码来看的话,它的值是大于128的(但是对于计算机来说,最高位是符号位,也就是说,这个字节的ASCII码会被计算机解释成负数,这个可以用来判断是不是全角字符),也就是说每个字节的最高位是1,落在了扩展的ASCII码表上。GBK编码和这种处理方式类似,它也是采用两个字节来存储,所以判断汉字的时候,可以用这个全角字符的GB码(国标码)来判断。

    GB码相关资料:https://www.cnblogs.com/winnxm/archive/2009/12/15/1625088.html

    ​ https://segmentfault.com/a/1190000023809482

    判断是否存在全角字符:

    ​ 如上述,两个字节的ASCII码小于0,则存在。

    if(char[0] < 0 && char[1] < 0)

    判断是否为汉字

    ​ 一个全角字符的GB码等于高位和低位的ASCII码(两个二进制数,正值)连接在一起的数值。

    ​ 即GBcode = (unsigned char) char[0] * 256 + (unsigned char) char[1]

    ​ 对照GB2312简体中文编码表,汉字的GB码大于0xB0A0,所以

    if(GBcode > 0xB0A0)zhNum++;

    判断是否有全角的特殊符号,就可以用GB码小于0xB0A0(或者对应GB2312表查找对应的范围)

    源码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define Max 2048 //Assuming that the text is a maximum of 2048 bytes
    int main(){
        int zhNum=0,figNum=0,spNum=0;//They are the number of Chinese characters, Numbers and Spaces.
        char txt[Max];
        printf("Please enter the text:\n");//Prompt the user to input the text
        fgets(txt,Max,stdin);
        for(int i=0;i<strlen(txt);i++){
            if(txt[i]<0&&txt[i+1]<0){
                int GBK=(unsigned char)txt[i]*256+(unsigned char)txt[i];
                if(GBK>0xB0A0)
                    zhNum++;
                i++;//Because the full Angle character takes up two bytes, it goes straight to the next byte's next byte judgment
            }
            else if(txt[i]>='0'&&txt[i]<='9')figNum++;
            else if(txt[i]==' ')spNum++;
        }
        printf("Chinese characters' number is %d.\nThe number of figure is %d.\nThe number of spaces is %d.\n",zhNum,figNum,spNum);
        return 0;
    }
    
    展开全文
  • 输出wchar_t数组中第i个汉字, 以下方式已经被验证不能实现【输出第1个汉字】的效果: <code class="language-cpp">#include<stdio.h> int main(){ wchar_t string[10]; printf("输入一...
  • 文件中车牌号的汉字如“豫”,在代码运行后显示两个很复杂的字,怎么解决? 要写一个停车场管理系统,这是其中文件读取的部分。 <code>#include<stdio.h> #include<stdlib.h>...
  • c语言问题

    2017-03-06 10:41:44
    char类型只有一个字节,汉字要占两个字节,故输入职工姓名时,应采用二维数组; #include #include #define N 10 int main() { void input(int[], char name[][8]); void sort(int[], char name[][8]); ...
  • C语言中的32个关键字

    2020-08-08 07:52:52
    (1)char:是容纳单字符的一种数据类型,不能存储汉字(一个汉字占两个字节)。如果要存储字符串的话要用String(以’\0’为字符串结束标志),其实String相当于一个char数组,例如,字符串abc 与 a[]={‘a’,‘b’,...
  • C语言基础知识整理

    2018-05-09 11:28:59
    一、关于sizeof和strlen。...我们输入字符串时通常用char数组:Char s[10];Scanf(“%s”,s);输入的字符串可能是中英文混杂的,英文就是一个个字母,一个字母就是一个char,占一个字节。而一个汉字占...
  • hdoj--2030汉字统计

    2018-05-20 22:57:45
    这道题又是一道水题,但是让我更了解了,在c语言中,汉字输入输出与内存关系。汉字机内码特点如下:在C语言中,可以通过将汉字作为字符串输入。由于一个汉字占2个字节,所以对汉字的操作,只能以2个字节作为操作...
  • 实例44 使用线类型函数设置多个汉字 123 实例45 彩色群点 125 实例46 饼图 126 实例47 产品折线图 128 实例48 直方图 131 实例49 变大变色的矩形与圆 133 实例50 多变的填充多边形 135 实例51 流星球 138 ...
  • 打印汉字表3. 打印如下图形4. 打印九九乘法表5. 水仙花数6. 输入年份,判断是否为闰年7. 两个数交换8. 三种循环结构求1-100之和9. 一维数组初始化并全部输出10. 自定义求和函数11. 获取数据类型的大小12. 判断一个...
  • 使用两种方式来进行刷弹幕操作 1 模拟键盘输入,自动输入文字,...如何所示的程序,将文件中的文本一行一行读入到数组中,然后根据文本中的字母来模拟键盘的输入,每输入完一行就输入一个空格和一个回车。bilibili.t...
  • 主要是 ling 的处理,和位的处理 * 一个字符数组记录数字,一个字符数组记录位 * 字符数组第 0 位为空是因为使其下标从 1 开始用 ...* 输出过程中注意 ling 的判断,多个连续的 0,要符合汉字读法,省略成一个 ling
  • //(包括结构体输入、输出,和结构体定义数组(指针同理,成员用箭头(pclass->sno, pclass->sname))) struct student{ char sname[20]; char ssex[2];//性别男或女,一个汉字占两个字节 int sage; float ...
  • 汉字的处理

    千次阅读 2005-01-08 23:36:00
    许多C语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,当然存储汉字应该用字符数组,这一点是肯定的,关键问题是汉字在你的计算机系统上占几个字节呢?你用这个语句就知道大小了:printf("%d",...
  • 我本来是想实现输入拼音输出汉字的功能,可是,好像是因为C语言只能识别256个ASCII码,所以出现了乱码现象,所以我不得已把汉字改成了大写英文字母。  实现的关键是哈希函数,这里因为我只是做练习而不是真正的...
  • c语言编程时,如何将文件的内容(内容中有汉字)输出  int main() {ifstream a1("a.txt",ios::in); //打开这个文件  然后看文件里有什么了,如果是字符串数组 则  string a[10];  for(int i=0;i  {a1>>...
  • 嵌入式系统编程修炼之道

    热门讨论 2011-11-14 20:48:44
    3.数组vs.动态申请 4.关键字const 5.关键字volatile 6.CPU字长与存储器位宽不一致处理 总结 C语言嵌入式系统编程修炼之道——屏幕操作篇 1.汉字处理 2.系统时间显示 3.动画显示 4.菜单操作 5.模拟MessageBox函数 ...
  • Chinese era.cpp

    2014-06-01 21:32:17
    (二维数组存储汉字) #include"stdio.h" #include "string.h" void main() { int a,b,year; char gz[6]; static char tg[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}; //C语言中字符串是以'\0'...
  • C语言里参数传递都是传值,是一个拷贝,修改指针,只是改变了拷贝的指向,原指针指向并没有改变,而修改指针的内容则是可以的。)如果函数的参数是一个指针,不要指望用该指针去申请动态内存。(即上面所说的修改...
  • 9.16 定时/计数器1的输入捕获实验 第10章 ATMEGAl6(L)的USART与PC机串行通信 10.1 ATMEGAl6(L)的异步串行收发器 10.2 USART的主要特点 10.3 时钟产生 10.4 帧格式 10.5 USART的寄存器及设置 10.6 USART的初始...
  • 1.3.2 图像的输入设备 1.3.3 高分辨率彩色显示器与图形显示卡 1.3.4 图像的硬拷贝 第2章 图像显示原理 2.1 彩色图像显示原理 2.1.1 黑白图像显示电路 2.1.2 不同图像类型的显示原理 2.1.3 调色板 2.1.4 调色...
  • 3.5.3 输入/输出接口的扩展 3.5.4 键盘的接口技术 3.5.5 显示器的接口技术 3.5.6 A/D转换器的接口技术 3.5.7 D/A转换器的接口技术 3.5.8 开关电路接口及光电耦合器接口 第4章 AVR系列单片机应用基础 4.1 AVR单片机...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

c语言输入汉字数组

c语言 订阅