文档库 最新最全的文档下载
当前位置:文档库 › C语言判断回文字符串

C语言判断回文字符串

C语言判断回文字符串
C语言判断回文字符串

C语言(中国铁道出版社)第4章习题6:

#include

int main(void)

{

char a[100];

int i=0,j=0;

printf("Please input string:");

gets(a);

while(a[i]!='\0')

i++;

i--;

for(;j<=i;i--,j++)

{

if(a[i]!=a[j])

break;

}

if(j<=i)

printf("%s is not a palindrome\n",a);

else

printf("%s is a palindrome\n",a);

}

C#判断字符串是否为数字字符串

C#判断字符串是否为数字字符串 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用try{} catch{}语句。 我们可以在try语句块中试图将string类型的字符串变量转换为int类型,如果该字符串不是数字字符串则会抛出异常,这时在catch语句块中就能捕获异常。一旦发现异常,则不是数字字符串。 我们可以以下三种方式将string类型转换为int类型。 (1)int.Parse(string); (2)Convert.ToInt16(string);//当数字字符串的位数大于4的时候请使用Convert.ToInt32() (3)Convert.ToInt32(string); 添加一个文本框TextBox1,和一个按钮Button1,当点击按钮时,判断文本框中的内容是否为数字字符串,是的话则输出转换后的数值。 protected void Button1_Click(object sender, EventArgs e) { string message = TextBox1.Text.Trim(); int result; if(isNumberic(message,out result)) { string tt=""; Page.ClientScript.RegisterStartupScript(this.GetType(), "", tt); } else

Page.ClientScript.RegisterStartupScript(this.GetType(), "", ""); } protected bool isNumberic(string message,out int result) { //判断是否为整数字符串 //是的话则将其转换为数字并将其设为out类型的输出值、返回true, 否则为false result = -1; //result 定义为out用来输出值 try { //当数字字符串的为是少于4时,以下三种都可以转换,任选一种 //如果位数超过4的话,请选用Convert.ToInt32() 和int.Parse() //result = int.Parse(message); //result = Convert.ToInt16(message); result = Convert.ToInt32(message); return true; } catch { return false; } }

最长回文子串

[转]最长回文子串O(n) 这个算法要解决的就是一个字符串中最长的回文子串有多长。这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长, 这个算法有一个很巧妙的地方,它把奇数的回文串和偶数的回文串统一起来考虑了。这一点一直是在做回文串问题中时比较烦的地方。这个算法还有一个很好的地方就是充分利用了字符匹配的特殊性,避免了大量不必要的重复匹配。 算法大致过程是这样。先在每两个相邻字符中间插入一个分隔符,当然这个分隔符要在原串中没有出现过。一般可以用‘#’分隔。这样就非常巧妙的将奇数长度回文串与偶数长度回文串统一起来考虑了(见下面的一个例子,回文串长度全为奇数了),然后用一个辅助数组P记录以每个字符为中心的最长回文串的信息。P[id]记录的是以字符str[id]为中心的最长回文串,当以str[id]为第一个字符,这个最长回文串向右延伸了P[id]个字符。 原串:waabwswfd 新串:# w # a # a # b # w # s # w # f # d # 辅助数组P: 1 2 1 2 3 2 1 2 1 2 1 4 1 2 1 2 1 2 1 这里有一个很好的性质,P[id]-1就是该回文子串在原串中的长度(包括‘#’)。 (证明: 1,显然l=2*p【i】-1即为新串中以s【i】为中心的最长回文串长度。 2,以s【i】为中心的回文串定以#开头和结尾,则l-1为原串长度的2 倍 证毕) 好,我们继续。现在的关键问题就在于怎么在O(n)时间复杂度内求出P数组了。只要把这个P数组求出来,最长回文子串就可以直接扫一遍得出来了。 由于这个算法是线性从前往后扫的。那么当我们准备求P[i]的时候,i以前的P[j]我们是已经得到了的。我们用mx记在i之前的回文串中,延伸至最右端的位置。同时用id这个变量记下取得这个最优mx时的id值。(注:为了防止字符比较的时候越界,我在这个加了‘#’的字符串之前还加了另一个特殊字符‘$’,故我的新串下标是从1开始的) 好,到这里,我们可以先贴一份代码了。 复制代码 1. void pk() { int i; int mx = 0; int id; for(i=1; i i ) p[i] = MIN( p[2*id-i], mx-i ); else p[i] = 1; for(; str[i+p[i]] == str[i-p[i]]; p[i]++) ; if( p[i] + i > mx ) { mx = p[i] + i; id = i; } } } 代码是不是很短啊,而且相当好写。很方便吧,还记得我上面说的这个算法避免了很多不必要的重复匹配吧。这是什么意思呢,其实这就是一句代码。 if( mx > i) p[i]=MIN( p[2*id-i], mx-i); 就是当前面比较的最远长度mx>i的时候,P[i]有一个最小值。这个算法的核心思想就在这里,为什么P数组满足这样一个性质呢? (下面的部分为图片形式)

堆栈方式实现字符回文数判断(可运行)

设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。 #include #include #include #include using namespace std; #define max 100 typedef char elemtype; typedef struct node { elemtype data; struct node *next; }listack; void initstack(listack *&s) { s=(listack*)malloc(sizeof(listack)); s->next=NULL; } int stacklength(listack *s) { int i=0; listack *p; p=s->next; while(p!=NULL) { i++; p=p->next; } return i; } void clearstack(listack *s) { listack *p=s->next; while(p!=NULL) { free(s); s=p; p=p->next; } } int stackempty(listack *s) { return(s->next==NULL);

void push(listack *& s,elemtype e) { listack *p; p=(listack*)malloc(sizeof(listack)); p->data=e; p->next=s->next; s->next=p; } int pop(listack *&s,elemtype &e) { listack *p; if(s->next==NULL) return 0; p=s->next; e=p->data; s->next=p->next; free(p); return 1; } int gettop(listack *s,elemtype &e) { if(s->next==NULL) return 0; e=s->next->data; return 1; } int judge(char *str) { listack *s;elemtype e; initstack(s); char *p=str; while(*p!='#') { push(s,*p); p++; } while(!stackempty(s)) { pop(s,e); if(e!=*str) return 0; str++; } return 1;

如何提取Oracle库表记录中的中文字符

如何提取Oracle库表记录中的中文字符 今日头条没事儿唠唠IT 2016-12-01 00:17 在最近做的一个项目中,需要将数据库表中的中文字符提取出来,以供业务人员二次处理。网上搜索一番后,采用Oracle数据库的ASCII函数解决问题。主要思路整理如下: 由于中文字符的ASCII码范围为45217至63486之间,因此可以此为切入点对目标字符串进行判断截取。编写函数如下: create or replace function getCNStr(str varchar2) return varchar2 is tmpStr varchar2(100); --临时变量 currentStr varchar2(10); --当前待判断处理的字符 asciiCode number; --当前待怕短处理字符的Ascii码 counts number; --字符串中的字符个数 i_loop number := 1; --循环变量 resultStr varchar2(200); --返回的结果字符串 begin --取出待处理字符串的长度(counts) select length(str) into counts from dual; --根据待处理字符串长度(counts),逐个字符判断处理

while i_loop <= counts loop currentStr := substr(str, i_loop, 1); select ASCII(currentStr) into asciiCode from dual; if asciiCode >= 45217 then tmpStr := tmpStr || currentStr; end if; if asciiCode <= 45216 then --非连续的中文字符串之间以空格隔开 tmpStr := tmpStr || ' '; end if; i_loop := i_loop + 1; end loop; resultStr := tmpStr; return(resultStr); end getCNStr; 至此,函数编写完成,编译后测试如下图: 有图有真相(哈哈)

C语言函数大全

C语言函数大全 1 字符测试函数 函数(及意义)函数分解Isalnum(){判断字符是否is alphbet(字母表) number(数字) 为字母或数字} Isalpha(){判断是否为英文is alphbet(字母表) 字母} Isblank(){空格和TAB} is blank(空格) Iscntrl() { 控制} is control(控制) Isdigit(){数字} is digit(数字) Isgraph(){除空格外的可打is graph(图表) 印字符} Islower(){是否为小写} is lowercase(小写) Isprintf(){可打印字符含空这个简单 字符} Ispunct(){标点或特殊符号is punctuation(标点) } Isspace(){检查是否为空字is space(空间) 符,即判断是否为空格,水平 定位字符“\t”,归位字符“\r ”,垂直定位字符“\v”,换行 字符“\n”,翻页“\f”} Isupper(){是否为大写字母is upper_case(大写) } Isxdigit(){十六进制} is hexadecimal digit(十六进制) Tolower(){将小写转换成 大写} Toupper(){将大写转换成这个简单(to change 或者to covert 或者 小写} transformation

字符串函数 Memchr(){在某一内存范围内查找一特定字符}Memory (储存)char(字符型炭)也可以是character (字符) Memcmp(){比较区域 str1,str2的前n个字节} Memory(同理)compare(比较) Memcpy(){由str2所指内存区域复 制n个字节到str1所指内存区域} Memory copy(复制) Memmove(){两个所指的内存区域 可重叠,但是内容会更改,函数 返回值为指向区域内存的指针} Memory move(移动) Memset(){把str所指的内存区域 的前N个字节设置成字符c} Set(设置)

回文串实验报告

回文串实验报告 课程名称:数据结构 实验名称:单链表 学生姓名:杜克强 学生学号: 201207092427

实验一回文串的基本操作及其应用 一、实验目的 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。 2、掌握栈和队列的特点,即后进先出和先进先出的原则。 3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序 存储结构和链式存储结构上的实现。 二、实验内容和要求 [问题描述] 对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。 [基本要求] (1)数据从键盘读入; (2)输出要判断的字符串; (3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。 [测试数据] 由学生任意指定。 三、实验步骤 1.需求分析 本演示程序用C语言编写,完成对一个字符串是否是回文字符串的判断 ①输入一个任意的字符串; ②对输入的字符串进行判断是否为回文串;

③输出判断结果; ④测试数据: A.依次输入“abccba”,“asddas”等数据; B.输出判断结果“Yes”,“No”等 四、算法设计 1、算法思想: 把字符串中的字符逐个分别存储到队列和堆栈中,然后逐个出队和出栈并比较出队列的数据元素和退栈的数据元素是否相等,若相等则是会文,否则不是。 2、模块设计 (1)int Palindrome_Test()判断字符序列是否为回文串; (2)Status main()主函数; (3)Status CreatStack(SqStack &S)创建一个栈; (4)Status Push(SqStack &S,SElemType e)入栈; (5)Status Pop(SqStack &S ,SElemType &e)出栈; (6)Status CreatQueue(LinkQueue &Q)创建一个队列; (7)Status EnQueue(LinkQueue &Q,QElemType e)入队; (8)Status DeQueue(LinkQueue &Q,QElemType &e)出队;

C语言回文数猜想

2.7.1.1 练习1 回文数的猜想 1输入一个数 2一个数,加上是这个数的倒序数,得出结果 3判断是否为回文数,是就退出,否则返回第2步骤 回文数:1336331、9559 典型:输入1735 1753+3571=5324 5324+4235=9559 9559就是一个回文数 程序解答过程: 1设计出各函数功能,便于调用 2编码,解答 各函数功能: 输入数据:int input(void) 对数据取逆序:int reverse(int data) 判断回文数:int ispalin(int data) 溢出判断:int isover(int data //palin.c #include int input(void) { int data=-1;//防止赋值失败? for(;;) { scanf("%d",&data); if(data>=10)//使得输入的数字不小于10 break; scanf("%*[^\n]");//取得除了换行\n之外的所有字符,抛掉 scanf("%*c");//抛掉换行\n } return data; }

int reverse(int data) { int res=0; for(;data>0;data=data/10)//取得data的的逆序 res=res*10+data%10;//data%10取得data最后一位数字 return res; } int ispalin(int data) { return data==reverse(data); } int isover(int data) { return data<=0||reverse(data)<=0;//当data大小越界,即超过2^31-1,变成负数 } int main() { int data=input(); int i; for(i=0;!isover(data);data+=reverse(data)) { if(!ispalin(data)) printf("[%d]:%d+%d=%d\n",++i,data,reverse(data),data+reverse(data)); else { printf("Palin:%d\n",data); return 0; } } printf("Can not find Palin!\n"); return 0; } 知识:unsigned int:2^32-1 int : 2^31-1 超过了最大值会越界,越界的数会变成负数

判断字符串是否是中文

判断字符串是否是中文 Unicode CJK 的范围分布在多个区段中,带有CJK 的区块名中都拥有汉字。但最常用的范围是U+4E00~U+9FA5,即名为:CJK Unified Ideographs 的区块,但U+9FA6~U+9FFF 之间的字符还属于空码,暂时还未定义,但不能保证以后不会被定义。 在正则表达式中使用[\u4e00-\u9fa5] 这种方式属于写死的代码,并不能根据平台所提供的字符集范围不同而改变,不过对于要求不是很高的话的是可以了。如果对字符集的要求很高,可以采用下面的这种Unicode 块的方式: String regex = "[\\p{InCJK Unified Ideographs}&&\\P{Cn}]]"; 在当前的JDK 版中与[\u4e00-\u9fa5] 的意义一致。但这样可以匹配Java 平台所支持Unicode 块名为CJK Unified Ideogrpahs 中已定义的字符,这种方式就属于“活”代码今后的JDK 版本升级了,定义到了\u9fa6 的字符,同样能够满足匹配。 public static void RecognizeChinese(String str) { int count = 0; String regex = "[\\p{InCJK Unified Ideographs}&&\\P{Cn}]]"; Pattern p = https://www.wendangku.net/doc/b717367299.html,pile(regEx); Matcher m = p.matcher(str); while (m.find()) { for (int i = 0; i <= m.groupCount(); i++) { count = count + 1; } } System.out.println("共有" + count + "个"); } 方法一: 在unicode 字符串中,中文的范围是在4E00..9FFF:CJK Unified Ideographs。 通过对字符的unicode编码进行判断来确定字符是否为中文。 protected bool IsChineseLetter(string input,int index) { int code = 0; int chfrom = Convert.ToInt32("4e00", 16); //范围(0x4e00~0x9fff)转换成int (chfrom~chend) int chend = Convert.ToInt32("9fff", 16); if (input != "") { code = Char.ConvertToUtf32(input, index); //获得字符串input中指定索引

求回文子串 O(n) manacher算法

求回文子串O(n) manacher算法 回文串定义:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。 回文子串,顾名思义,即字符串中满足回文性质的子串。 经常有一些题目围绕回文子串进行讨论,比如HDOJ_3068_最长回文,求最长回文子串的长度。朴素算法是依次以每一个字符为中心向两侧进行扩展,显然这个复杂度是O(N^2)的,关于字符串的题目常用的算法有KMP、后缀数组、AC自动机,这道题目利用扩展KMP 可以解答,其时间复杂度也很快O(N*logN)。但是,今天笔者介绍一个专门针对回文子串的算法,其时间复杂度为O(n),这就是manacher算法。 大家都知道,求回文串时需要判断其奇偶性,也就是求aba和abba的算法略有差距。然而,这个算法做了一个简单的处理,很巧妙地把奇数长度回文串与偶数长度回文串统一考虑,也就是在每个相邻的字符之间插入一个分隔符,串的首尾也要加,当然这个分隔符不能再原串中出现,一般可以用‘#’或者‘$’等字符。例如: 原串:abaab 新串:#a#b#a#a#b# 这样一来,原来的奇数长度回文串还是奇数长度,偶数长度的也变成以‘#’为中心的奇数回文串了。 接下来就是算法的中心思想,用一个辅助数组P记录以每个字符为中心的最长回文半径,也就是P[i]记录以Str[i]字符为中心的最长回文串半径。P[i]最小为1,此时回文串为Str[i]本身。 我们可以对上述例子写出其P数组,如下

新串:# a # b # a # a # b # P[] : 1 2 1 4 1 2 5 2 1 2 1 我们可以证明P[i]-1就是以Str[i]为中心的回文串在原串当中的长度。 证明: 1、显然L=2*P[i]-1即为新串中以Str[i]为中心最长回文串长度。 2、以Str[i]为中心的回文串一定是以#开头和结尾的,例如“#b#b#”或“#b#a#b#”所以L减去最前或者最后的‘#’字符就是原串中长度的二倍,即原串长度为(L-1)/2,化简的P[i]-1。得证。 依次从前往后求得P数组就可以了,这里用到了DP(动态规划)的思想,也就是求P[i]的时候,前面的P[]值已经得到了,我们利用回文串的特殊性质可以进行一个大大的优化。我先把核心代码贴上: for(i=1;ii) { p[i]=Min(p[2*id-i],MaxId-i); } else { p[i]=1; } while(a[i+p[i]]==a[i-p[i]]) { p[i]++; } if(p[i]+i>MaxId) { MaxId=p[i]+i; id=i; } }

中文字符集

最近一直被这个字符集问题,弄的头疼。想不到一个很好的办法去解决。问题是这样的:“在超链接中传递参数的时候总是出现乱码”在Action中用debug查的时候就是乱码,在Tomcat 中把Service.xml将字符集改成UTF-8,GBK,GB2312都试过了,仍然没有解决这个问题。很是郁闷!~~~ 在现实工作中我们会经常遇到字符转换的问题:有的时候还会出现乱码.因为工作需要我从别人的静态网页上抓取数据.用到的方法是传一个uri进去,然后取出你所想得到的字符串.代码如下: public static String getData(String url1) throws Exception { String result = ""; URL url = new URL(url1); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); PrintWriter out = new PrintWriter(connection.getOutputStream()); out.close(); BufferedReader in = new BufferedReader(new InputStreamReader(connection. getInputStream(),"UTF-8")); //特别注意这里,后面的编码格式,一般都是用UTF-8,因为这是通用的.如果用汉字可以用GBK.不要用gb2312.因为它是GBK的子集. String line; while ( (line = in.readLine()) != null) { result = result + "\n" + line; } in.close(); String html =replaceFunc2(replaceFunc2(result,""); return html; } public static String replaceFunc2(String str_source, String str_start,String str_end) { String info = "", rep_str = "", rep_str2 = ""; int startFlag = 0, endFlag = 0; startFlag = str_source.indexOf(str_start); endFlag = str_source.indexOf(str_end); info = str_source; if (startFlag >= 0 && endFlag >= 0 && startFlag < endFlag) { rep_str = info.substring(0, startFlag); rep_str2 = info.substring(endFlag + str_end.length()); info = rep_str + rep_str2; } // System.out.print("==========="+info+"=========="); return info; }

回文(数据结构)

//借助栈和链队列判断序列是否回文 #include #include #define ERROR 0 #define OK 1 #define STACK_INT_SIZE 10 /*存储空间初始分配量*/ #define STACKINCREMENT 5 /*存储空间分配增量*/ typedef char ElemType; /*定义元素的类型*/ typedef struct{ ElemType *base; ElemType *top; int stacksize; /*当前已分配的存储空间*/ }SqStack; typedef struct QNode{ ElemType data; struct QNode *next; }QNode,*Queue; typedef struct{ Queue front; Queue rear; }LinkQueue; int InitStack(SqStack *S){ S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType)); if(!S->base) return ERROR; S->top=S->base; S->stacksize=STACK_INT_SIZE; return OK; }/*InitStack*/ int Push(SqStack *S,ElemType e){ if(S->top-S->base>=S->stacksize){ S->base=(ElemType*)realloc(S->base,(STACK_INT_SIZE+STACKINCREMENT)*sizeof(ElemType)); if(!S->base) return ERROR; S->top=S->base+S->stacksize;S->stacksize=S->stacksize+STACKINCREMENT; } *S->top++=e; return OK; }/*Push*/ int Pop(SqStack *S,ElemType &e){

回文判断实验报告

回文判断实验报告 一.实验题目:回文判断 二.实验目的: 对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。 三.实验需求: 1.数据从键盘读入; 2.输出要判断的字符串; 3.利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”否则输出“No” 四.主要实现函数 (1)建立顺序栈存储结构 typedef struct { } (2)初始化 int initstack(Sqstack &s,int maxsize) (3)入栈 int enstack(Sqstack &s, char e) (4)出栈 int popstack(Sqstack &s,char &e) (5)判断是否为回文 int main() { int r; //用于判断是否为回文 Sqstack L,Q; //定义两个栈

initstack(L,20); initstack(Q,20); int l; //用于记录输入字符的长度cout<<"请输入字符串长度"; cin>>l; if(l<=0)exit(1); cout<<"输入字符"<>p; enstack(L,p); //入栈 L } cout< using namespace std; typedef char SElemType; typedef struct { SElemType *base; SElemType *top; int stacksize;

使用正则表达式判断如果电话输入了,则输入的电话号码必须为数字

/*使用正则表达式判断如果电话输入了,则输入的电话号码必须为数字*/ var con = document.getElementById('tel').value; var tel =/[^0-9]; var zip=document.getElementById('zip').value; https://www.wendangku.net/doc/b717367299.html,pile(/^[0-9]{6}$/); if(tel.test(con)){ document.getElementById('show5').innerText='输入的电话号码必须为数字'; return false; } if(!re.test(trim(zip))){ document.getElementById('show7').innerText='*邮编格式不正确'; return false; } */ 2. 只能是汉字: ﹤input onkeyup="value="/oblog/value.replace(/[^\u4E00-\u9FA5]/g,'')"﹥ 3.只能是英文: ﹤script language=java script ﹥function onlyEng(){if(!(event.keyCode﹥=65&&event.keyCode﹤=90))event.returnvalue=false;}﹤/ script ﹥﹤input onkeydown="onlyEng();"﹥

4. 只能是数字: ﹤script language=java script ﹥function onlyNum(){if(!((event.keyCode﹥=48&&event.keyCode﹤=57)||(event.keyCode﹥=96&&event.keyCode﹤=105)))//考虑小键盘上的数字键event.returnvalue=false;}﹤/ script ﹥﹤input onkeydown="onlyNum();"﹥ . 只能是英文字符和数字: ﹤input onkeyup="value="/oblog/value.replace(/[\W]/g,"'')"onbeforepaste="clipboardData.s etData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"﹥ 6. 验证邮箱格式: ﹤script LANGUAGE=java script RUNAT=Server﹥function isEmail(strEmail) {if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Z a-z0-9]+$/) != -1)return true;elsealert("oh");}﹤/ script ﹥﹤input type=text onblur=isEmail(this.value)﹥ ﹤script LANGUAGE=java script RUNAT=Server﹥function isEmail(strEmail) {if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Z a-z0-9]+$/) != -1)return true;elsealert("oh");}﹤/ script ﹥﹤input type=text onblur=isEmail(this.value)﹥ 7. 屏蔽关键字(这里屏蔽***和****): ﹤ script language="java script 1.2"﹥function test() {if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){alert(":)");a.b.focus();return false;}}﹤/ script ﹥﹤form name=a onsubmit="return test()"﹥﹤input type=text name=b﹥﹤

C语言字符串操作总结大全(超详细)

C语言字符串操作总结大全(超详细) 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c) 在字符串中反向查找 strstr(p, p1) 查找字符串 strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移 strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移 * 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符 2)字符串到数值类型的转换 strtod(p, ppend) 从字符串p 中转换double 类型数值,并将后续的字符串指针存储到ppend 指向的char* 类型存储。 strtol(p, ppend, base) 从字符串p 中转换long 类型整型数值,base 显式设置转换的整型进制,设置为0 以根据特定格式判断所用进制,0x, 0X 前缀以解释为十六进制格式整型,0 前缀以解释为八进制格式整型 atoi(p) 字符串转换到int 整型 atof(p) 字符串转换到double 符点数 atol(p) 字符串转换到long 整型 3)字符检查 isalpha() 检查是否为字母字符 isupper() 检查是否为大写字母字符 islower() 检查是否为小写字母字符 isdigit() 检查是否为数字 isxdigit() 检查是否为十六进制数字表示的有效字符 isspace() 检查是否为空格类型字符 iscntrl() 检查是否为控制字符 ispunct() 检查是否为标点符号 isalnum() 检查是否为字母和数字 isprint() 检查是否是可打印字符 isgraph() 检查是否是图形字符,等效于isalnum() | ispunct()

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码

Function IsLike(strText As String, pattern As String) As Boolean IsLike = strText Like pattern End Function Function IsChinese(strText As String) As Boolean Dim i%, h$ h = Hex(Asc(strText)) If Asc(Left(h, 1)) >= 66 And Asc(Left(h, 1)) <= 70 Then IsChinese = True End If End Function Function StringType(strText As String, Optional outPutType As Integer = 1, Optional sumVar As Boolean = False) As Variant Dim strtemp As String, blnArray(1 To 5) As String, strPreType As Integer Dim intNum As Integer, startPos As Integer, intlen As Integer Dim strArray As Variant, strCompare1 As String, strCompare2 As String, dblSum As Double If sumVar = True And Not (outPutType <> 2 Or outPutType <> 4) Then sumVar = False For i = 1 To Len(strText) strtemp = Mid(strText, i, 1) If i > 1 Then strCompare1 = WorksheetFunction.Asc(Mid(strText, i - 1, 3)) strCompare2 = WorksheetFunction.Asc(Mid(strText, i, 2)) If WorksheetFunction.Dbcs(strtemp) = strtemp Then strtemp = WorksheetFunction.Asc(strtemp) If IsLike(strtemp, "[0-9]") Or IsLike(strCompare1, "[0-9].[0-9]") Or IsLike(strCompare2, "-[0-9]") Then If strPreType = 4 Then blnArray(4) = Left(blnArray(4), Len(blnArray(4)) - 1) & intNum Else intNum = 1 blnArray(4) = blnArray(4) & "- " & i & "/" & intNum End If strPreType = 4 intNum = intNum + 1 ElseIf IsLike(strtemp, "[a-zA-Z]") Then If strPreType = 5 Then blnArray(5) = Left(blnArray(5), Len(blnArray(5)) - 1) & intNum Else intNum = 1 blnArray(5) = blnArray(5) & "- " & i & "/" & intNum End If strPreType = 5 intNum = intNum + 1 ElseIf IsChinese(strtemp) Then If strPreType = 1 Then blnArray(1) = Left(blnArray(1), Len(blnArray(1)) - 1) & intNum

Linux下常用C语言字符串操作函数

Linux下常用C语言字符串操作函数 stroul, strdup snprintf() atio C中常用字符串操作函数 #include size_t strlen(const char *s) 测量字符串长度s的实际长度。 例如s[20]="abc",那么strlen(s)的结果是3,而不是20.这就是实际长度 char *strcat(const char *s1, const *s2) 将字符串s2连接到s1的尾部。从s1的\0开始。 int strcmp(const *s1,const *s2) 比较s1和s2。 s1 = s2的时候返回值=0 s1 < s2的时候返回至<0 s1 > s2的时候返回值>0 char *strchr(const char *s, char c); 返回s中首次出现C的位置的指针。如果s中不存在c则返回NULL char *strrchr(const char *s, char c );返回s中最后一次出现c的位置的指针。如果没有,则返回0 char *strstr(const char *haystack, const char *needle);返回haystack中needle字符串首次出现的位置的指针(不比较结束符NULL)。若果没找到则返回NULL 限定长度的比较,拷贝和追加函数 int strncmp(char *s1, const char *s2, size_t n);(这些都是针对字符串的前n个字符来操作的) char *strncpy(char *dest, const char *src, size_t n); char *strncat(char *dest, const char *src, size_t n); char *strdup(char *s)返回指向被复制的字符串的指针,所需空间由malloc()分配而且需要free释放空间 int atoi(const char *nptr);将字符串转换成整型数

相关文档