字符转点字符点阵的函数及示例

时间:2023年01月11日

/

来源:shmilus

/

编辑:本站小编

收藏本文

下载本文

以下是小编为大家准备的字符转点字符点阵的函数及示例,本文共7篇,仅供参考,欢迎大家阅读。本文原稿由网友“shmilus”提供。

篇1:字符转点字符点阵的函数及示例

函数|示例

写程序的时候突然想到的方法,感觉简单又好用,一个实用函数,所以发出来,下面是这个函数:

function txtToPosArr(dt:String, w:Number, h:Number):Array {

/*

* author: fanflash(www.fanflash.cn)

* date: -5-14

* info: 将文字转为点阵诸存

* -----Parameters-------

* dt: 要转换成字符串的字符

* w: 两点像素点之间的横轴间距

* h: 两点像素点之间的纵轴间距

* note: 如果想增加点的密度,可以把文本字号设置大些

*/

//检查参数的可用性

w = (w != undefined) ? w : 0;

h = (h != undefined) ? h : 0;

var t_txt:TextField = _root.createTextField(“txtToPosTxt”, _root.getNextHighestDepth, -500, -500, 100, 100);

//设置文本

t_txt.autoSize = true;

t_txt.multiline = false;

t_txt.wordWrap = false;

t_txt.selectable = false;

t_txt.text = dt;

t_txt._visible = false;

//生成图片数据

var txtBmp:flash.display.BitmapData = new flash.display.BitmapData(t_txt._width, t_txt._height, false, 0xffffff);

txtBmp.draw(t_txt);

//创建文字数组

var t_arr:Array = new Array();

var pix:Number;

for (var y = 0; y

for (var x = 0; x

if (txtBmp.getPixel(x, y) != 0xffffff) {

t_arr.push({x:x+x*w, y:y+y*h});

}

}

}

//删除创建的文字

t_txt.removeTextField();

txtBmp.dispose();

return t_arr;

}

原理很简单,利用BITMAP类把黑色的点选出来,因为白色的是背景,所以只要是黑色的点,那么都是笔划和线条了.下面是一个用此函数的示例程序:

源程序:

//welcome to www.fanflash.cn

System.useCodepage = true;

Stage.scaleMode = “noScale”;

Stage.showMenu = false;

function main() {

var t:Array;

ok_btn.onPress = function() {

removeMC();

t = txtToPosArr(input_txt.text, 4, 4);

for (var i in t) {

createMC(t.x, t.y);

}

};

}

function txtToPosArr(dt:String, w:Number, h:Number):Array {

/*

* author: fanflash(www.fanflash.cn)

* date: 2007-5-14

* info: 将文字转为点阵诸存

* -----Parameters-------

* dt: 要转换成字符串的字符

* w: 两点像素点之间的横轴间距

* h: 两点像素点之间的纵轴间距

* note: 如果想增加点的密度,可以把文本字号设置大些

*/

//检查参数的可用性

w = (w != undefined) ? w : 0;

h = (h != undefined) ? h : 0;

var t_txt:TextField = _root.createTextField(“txtToPosTxt”, _root.getNextHighestDepth(), -500, -500, 100, 100);

//设置文本

t_txt.autoSize = true;

t_txt.multiline = false;

t_txt.wordWrap = false;

t_txt.selectable = false;

t_txt.text = dt;

t_txt._visible = false;

//生成图片数据

var txtBmp:flash.display.BitmapData = new flash.display.BitmapData(t_txt._width, t_txt._height, false, 0xffffff);

txtBmp.draw(t_txt);

//创建文字数组

var t_arr:Array = new Array();

var pix:Number;

for (var y = 0; y

for (var x = 0; x

if (txtBmp.getPixel(x, y) != 0xffffff) {

t_arr.push({x:x+x*w, y:y+y*h});

}

}

}

//删除创建的文字

t_txt.removeTextField();

txtBmp.dispose();

return t_arr;

}

import flash.filters.GlowFilter;

import mx.transitions.Tween;

import mx.transitions.easing.*;

function createMC(x:Number, y:Number) {

//点陈坐标偏移

x += 50;

y += 150;

//补间动画样式

var tweenFun:Function = Back.easeOut;

var d:Number = _root.getNextHighestDepth();

var _mc:MovieClip = _root.attachMovie(“dot”, “dot”+d, d);

_mc.cacheAsBitmap = true;

//_mc.filters = [new GlowFilter(Math.round(Math.random()*0xffffff))];

_mc.filters = [new GlowFilter(0xffffff)];

_mc._x = Math.random()*Stage.width;

_mc._y = Math.random()*Stage.height;

var xt:Number = 1+Math.round(Math.random()*2);

var yt:Number = 1+Math.round(Math.random()*2);

new Tween(_mc, “_x”, tweenFun, _mc._x, x, xt, true);

new Tween(_mc, “_y”, tweenFun, _mc._y, y, yt, true);

}

function removeMC() {

for (var m in _root) {

if (_root[m]._name.substr(0, 3) == “dot”) {

_root[m].removeMovieClip();

}

}

}

main();

源程序下载:点击这里下载源文件

篇2:C++ 中字符大小写转换的函数

首先判断

如果是小写:

if(islower(str[i]))

把小写字母变成大写字母,函数就是toupper

str[i] = toupper(str[i]);

else

如果是大写字母,变成小写字母函数是:tolower

str[i] = tolower(str[i]);

检测大写字母是:isupper

检测小写字母是:islower

大写------->小写:tolower

小写-------->大写:toupper

例子

代码:

#include

#include

#include

#define MAXN 21

using namespace std;

char str[MAXN];

int main()

{

cin>>str;

for(int i = 0; i < strlen(str); i++)

{

if(islower(str[i]))

str[i] = toupper(str[i]);

else if(isupper(str[i]))

str[i] = tolower(str[i]);

}

cout<

return 0;

}

篇3:妙用Excel隐藏函数Phonetic合并区域字符

朋友抱怨Excel中链接文本的函数Concatenate并不方便,不能轻松地将一个区域内的文本一股脑地链接在一起,但是Office中有一些隐藏函数,这些隐藏函数常常会带给我们一些惊喜,比如Excel中的一个隐藏函数Phonetic就能够方便地将文本链接在一起。

编注:CONCATENATE 函数简介

适用范围: Microsoft Office SharePoint Server , Windows SharePoint Services 3.0

功能:将多个文本字符串合并为一个文本字符串。

语法:CONCATENATE(text1,text2,...)

Text1, text2,... 1 到 30 个将要合并为单个文本项的文本项。这些文本项可以是文本字符串、数字或列引用。

Phonetic函数的帮助文件解释为“该函数只适用于日文版”,按理说,它不应该出现在中文版Excel中。可事实上,它一直存在,只是没人使用过它,因为此函数是用来提取日文文本字符串中的拼音字符的。

一个偶然的机会,我发现此函数可以用在中文版Excel中。在D1单元格输入公式=PHONETIC(A1:C4),得到的结果正是我们梦寐以求的“合并区域字符”。在中文版Excel中使用此函数时,帮助文件中的说明(如果reference为单元格区域,则返回区域左上角单元格中的furigana文本字符串,

如果reference为不相邻单元格的区域,将返回错误值#N/A)纯属“误导”。

微软在线帮助:

PHONETIC函数

适用范围: Microsoft Office Excel

功能:提取文本字符串中的拼音 (furigana) 字符。该函数只适用于日文版。

语法:PHONETIC(reference)

Reference 为文本字符串或对单个单元格或包含 furigana 文本字符串的单元格区域的引用。

说明

如果 reference 为单元格区域,则返回区域左上角单元格中的 furigana 文本字符串。

如果 reference 为不相邻单元格的区域,将返回错误值 #N/A。

以下是此函数的一个实例。比较表二中数据是否有与表一数据完全重复。在J2单元格输入公式=SUM((PHONETIC(OFFSET($A$2:$D$2,ROW($1:$5),))=PHONETIC(F3:I3))*1)按三键(CTRL+SHIFT+ENTER)结束录入,向下复制公式,如表二数据与表一有完全重复,则公式结果会大于等于1,否则为0。

进一步测试发现,此函数会将区域引用中的逻辑值、错误值、数值、公式全部忽略。此特性可以很容易区分文本与结果为文本的公式。,单元格B10输入公式=IF(ISTEXT(A10)*(PHONETIC(A10)=“”),“公式”,“文本”),单元格是文本的显示为“文本”,是公式的显示为“公式”。

篇4:妙用Excel隐藏函数Phonetic合并区域字符

有些朋友抱怨Excel中链接文本的函数Concatenate并不方便,不能轻松地将一个区域内的文本一股脑地链接在一起,但是Office中有一些隐藏函数,这些隐藏函数经常会带给我们一些惊喜,比如Excel中的一个隐藏函数Phonetic就能够方便地将文本链接在一起。

Phonetic函数的帮助文件解释为“该函数只适用于日文版”,按理说,它不应该出现在中文版Excel中。可事实上,它一直存在,只是没人使用过它,因为此函数是用来提取日文文本字符串中的拼音字符的。

一个偶然的机会,我发现此函数可以用在中文版Excel中。在D1单元格输入公式=PHONETIC(A1:C4),得到的结果正是我们梦寐以求的“合并区域字符”。在中文版Excel中使用此函数时,帮助文件中的说明(假如reference为单元格区域,则返回区域左上角单元格中的furigana 文本字符串,

假如reference为不相邻单元格的区域,将返回错误值#N/A)纯属“误导”。

以下是此函数的一个实例。比较表二中数据是否有与表一数据完全重复。在J2单元格输入公式=SUM((PHONETIC(OFFSET($A$2:$D$2,ROW($1:$5),))=PHONETIC(F3:I3))*1)按三键 (CTRL+SHIFT+ENTER)结束录入,向下复制公式,如表二数据与表一有完全重复,则公式结果会大于等于1,否则为0。

进一步测试发现,此函数会将区域引用中的逻辑值、错误值、数值、公式全部忽略。此特性可以很轻易区分文本与结果为文本的公式。,单元格B10输入公式=IF(ISTEXT(A10)*(PHONETIC(A10)=“”),“公式”,“文本”),单元格是文本的显示为“文本”,是公式的显示为“公式”。

篇5:LeetCode Roman to Integer 罗马字符转数字 解题报告

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

把一个给定的罗马字符转为数字,首先要了解罗马字符表示的规则。

一,_R底止灿7,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。

二,在^大的_R底值挠疫上^小的_R底郑表示大底旨有底郑例如:VI(6),VIII(8),LV(55=50 + 5),LX(60=50 + 10)

三,在^大的_R底值淖筮上^小的_R底郑表示大底旨跣底郑例如:IX(9),XL(40=50 - 10),XC(90=100 - 10)

四,左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV。

五,左pr不可跨越一位怠1热纾99不可以用IC(100 - 1)表示,而是用XCIX([100 - 10] + [10 - 1])表示。

解题思路,有二条处理逻辑:

一,判断当前字符是否比next字符小,如果小的话需要用下一个字符减去当前字符加到最终结果字符身上,

二,否则的话,就把当前字符直接加到最终结果字符。

下面是AC代码:

public class Solution {HashMapromanToIntMap = new HashMap{ { put('I', new Integer(1)); put('V', new Integer(5)); put('X', new Integer(10)); put('L', new Integer(50)); put('C', new Integer(100)); put('D', new Integer(500)); put('M', new Integer(1000)); } }; public int romanToInt(String s) { int ret = 0; int i = 0; while(i

篇6:Lua判断字符串中包含中文字符的方法和计算字符串宽度函数

这篇文章主要介绍了Lua判断字符串中包含中文字符的方法和计算字符串宽度函数分享,需要的朋友可以参考下

一、判断字符串中包含中文字符的方法

遍历数组,对每个字节使用string.byte(),发现有大于127的,就是汉字,可以参照下面的代码,

二、计算字符串宽度函数

代码如下:

-- 计算字符串宽度

local str = “Jimmy: 你好,世界!”

local fontSize = 20

local lenInByte = #str

local width = 0

for i=1,lenInByte do

local curByte = string.byte(str, i)

local byteCount = 1;

if curByte>0 and curByte<=127 then

byteCount = 1

elseif curByte>=192 and curByte<223 then

byteCount = 2

elseif curByte>=224 and curByte<239 then

byteCount = 3

elseif curByte>=240 and curByte<=247 then

byteCount = 4

end

local char = string.sub(str, i, i+byteCount-1)

i = i + byteCount -1

if byteCount == 1 then

width = width + fontSize * 0.5

else

width = width + fontSize

print(char)

end

end

print(“总宽度: ”..width)

篇7:对一个字符数组连续用gets函数出现的问题(缓冲区内容补充)

昨天调试程序(见下面代码)遇到下面一个问题:

#includeint main(){ int i = 1; while(i) { char str[100]; printf(please input a str:); gets(str); puts(str); printf(continue:1,break:0); scanf(%d,&i); } return 0;}

咦!!!我还没从键盘输入字符串,他怎么就执行下一步了呢???????

对代码进行调试:

此时内存:

再点击下一步:

咦??????数组中的“----->>0 <<-----”哪来的???百思不得其解!

查阅大量资料原来和缓冲区有关,首先了解下缓冲区:

C++编程对缓冲区的理解

什么是缓冲区

缓冲区又称为缓存,它是内存空间的一部分,也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

为什么要引入缓冲区

我们为什么要引入缓冲区呢?

比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。

现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

缓冲区的类型

缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。

1、全缓冲

在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。

2、行缓冲

在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。

3、不带缓冲

也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。

缓冲区的刷新

下列情况会引发缓冲区的刷新:

1、缓冲区满时;

2、执行flush语句;

3、执行endl语句;

4、关闭文件。

可见,缓冲区满或关闭文件时都会刷新缓冲区,进行真正的I/O操作。另外,在C++中,我们可以使用flush函数来刷新缓冲区(执行I/O操作并清空缓冲区),如:

cout<

endl控制符的作用是将光标移动到输出设备中下一行开头处,并且清空缓冲区。

cout<

相当于

cout<<” ” << p=“”>

通过实例演示说明

1、文件操作演示全缓冲

创建一个控制台工程,输入如下代码:

#includeusing namespace std;int main(){ //创建文件test.txt并打开ofstream outfile(test.txt); //向test.txt文件中写入4096个字符’a’for(int n=0;n<4096;n++){outfile<<'a';} //暂停,按任意键继续system(PAUSE); //继续向test.txt文件中写入字符’b’,也就是说,第4097个字符是’b’outfile<<'b'; //暂停,按任意键继续system(PAUSE);return 0;}

上面这段代码很容易理解,已经在代码内部作了注释,

编写这段小代码的目的是验证WindowsXP下全缓冲的大小是4096个字节,并验证缓冲区满后会刷新缓冲区,执行真正的I/O操作。

编译并执行,运行结果如下:

此时打开工程所在文件夹下的test.txt文件,您会发现该文件是空的,这说明4096个字符“a”还在缓冲区,并没有真正执行I/O操作。敲一下回车键,窗口变为如下:

此时再打开test.txt文件,您就会发下该文件中已经有了4096个字符“a”。这说明全缓冲区的大小是4K(4096),缓冲区满后执行了I/O操作,而字符“b”还在缓冲区。

再次敲一下回车键,窗口变为如下:

此时再打开test.txt文件,您就会发现字符“b”也在其中了。这一步验证了文件关闭时刷新了缓冲区。

2、键盘操作演示行缓冲

先介绍getchar()函数。

函数原型:int getchar(void);

说明:当程序调用getchar()函数时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar()函数才开始从键盘缓冲区中每次读入一个字符。也就是说,后续的getchar()函数调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才重新等待用户按键。

不知道您明白了没有,再通俗一点讲,当程序调用getchar()函数时,程序就等着用户按键,并等用户按下回车键返回。期间按下的字符存放在缓冲区,第一个字符作为函数返回值。继续调用getchar()函数,将不再等用户按键,而是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完后,才等待用户按键。

如果您还没有明白,只能怨我表达能力有限,您可以结合以下实例体会。

创建一个控制台工程,输入如下代码:

#includeusing namespace std;int main(){char c;//第一次调用getchar()函数//程序执行时,您可以输入一串字符并按下回车键,按下回车键后该函数才返回c=getchar(); //显示getchar()函数的返回值cout<

编译运行程序,会提示您输入字符,您可以交替按下一些字符,如下:您一直按下去,您就会发现当您按到第4094个字符时,不允许您继续输入字符。这说明行缓冲区的大小也是4K。此时您按下回车键,返回第一个字符’a’,如下图:继续敲一下回车键,将缓冲区的其它的字符全部输出,如下图:

3、标准错误输出不带缓冲如错误输出时使用:

cerr<<”错误,请检查输入的参数!”;

这条语句等效于:fprintf(stderr, ”错误,请检查输入的参数!”);

好了,就说到这吧,祝您好运,希望能对您有所帮助。

虽然有些图片看不到,但是该博主的描述使我获益匪浅!!!

看到这里我们一开始的问题也就迎刃而解了:

scanf(%d,&i);执行次代码后,1赋值给了i-------->>>>>但换行符enter却留在了缓冲区,下次执行gets函数时,由于缓冲区存在内容,所以gets函数不再等待用户输入,而是直接从缓冲区读取内容。

由于gets功能如下:

''====0(值相等---->>>>ASCII的0为NULL),这也就是一开始查看内存,ASCII0存在的原因!!!

PHP字符编码绕过漏洞总结漏洞预警

Python写的英文字符大小写转换代码示例

c/c++中的字符指针数组,指向指针的指针的含义

解读HTML:命名空间与字符编码网页设计

excel怎么在单元格中插入勾字符excel办公/数码

下载字符转点字符点阵的函数及示例(精选7篇)
字符转点字符点阵的函数及示例.doc
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
最新范文更多
热门文章
    猜你喜欢
    点击下载本文文档