字符串试题整理OK
来源:互联网 发布:sftp端口登录命令 编辑:程序博客网 时间:2024/06/05 07:40
1,实现字符串通配符
int match(char * str, char * ptn) { if (*ptn == '\0') return 1; if (*ptn == '*') { do { if (match(str++, ptn+1)) return 1; } while (*str != '\0'); return 0; } if(*ptn == '?'){return match(str+1, ptn+1); }if(*ptn == *str){return match(str+1, ptn+1); }return 0; }
2,颠倒一个字符串
例如:
god->dog
void reverse(char *str) { reverseFixlen(str, strlen(str)); } void reverseFixlen(char *str, int n) { for(int i = 0; i<(n+1)/2; i++)char temp = str[i]; str[i] = str[n-i-1];str[n-i-1] = temp; } }
3,颠倒一个句子
例如:My name is shell. -> shell is name My.其中每个单词顺序不变
void reverseWordsInSentence(char * sen) { //整个句子颠倒int len = strlen(sen); reverseFixlen(sen, len);char * p = sen;char * q; while (*p!='\0') { //word的第一个字母while (*p==' ' || *p==',' || *p=='.' || *p==';' || *p=='!') p++; //word的最后一个字母q = p; while (*q!=' ' || *q!=',' || *q!='.' || *q!=';' || *q!='!' && q!='\0') q++; //转换reverseFixlen(p, q-p); }}
4,查找子字符串
BM算法
5,比较两个字符串
int strcmp(char * p1, char * p2) { while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2) { p1++, p2++; } if (*p1 == '\0' && *p2 == '\0') return 0; if (*p1 == '\0') return -1; if (*p2 == '\0') return 1; return (*p1 - *p2); }
6,在一个字符串中找到第一个只出现一次的字符
【google 2006】如输入abaccdeff,则输出b。注意,这里的字符指的是ASCII中的256种。
char firstSingle(char * str) { int a[255]; memset(a, 0, 255*sizeof(int)); //扫一遍进行计数char *p=str; while (*p!='\0') { a[*p++] ++; } //扫一遍统计只出现一次的p = str; while (*p!='\0') { if (a[*p] == 1) return *p; } return '\0'; }
7,字符串转整数
例如输入字符串"345",则输出整数345。
int atoi(char * str) { int sig = 1;if(*str == '-' ){sig = -1;str++;}else if(*str == '+'){str++;}int num = 0;while(*str!='\0'){if(*str>='0'&&*str<='9'){num = num*10 + (*str++-'0');}}return sig*num;}
8,找最长数字串
题目:写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回, 并把这个最长数字串付给其中一个函数参数outputstr 所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9, outputstr 所指的值为123456789
int continumax(char *outputstr, char *inputstr) { char* pstart = NULL;int max = 0;int len = 0;while(1){if(*inputstr>='0'&&*inputstr<='9')len++;else{if(len>max){max = len;pstart = inputstr-len;}len = 0;}if(*inputstr++=='\0')break;}//拷贝到outputstr中for(int i=0;i<max;i++){*outputstr++=*pstart++;}*outputstr='\0';return max;}
9,左旋转字符串
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
char* LeftRotateString(char* pStr, unsigned int n){ if(pStr != NULL) { int nLength = static_cast<int>(strlen(pStr)); if(nLength > 0 || n == 0 || n > nLength) { char* pFirstStart = pStr; char* pFirstEnd = pStr + n - 1; char* pSecondStart = pStr + n; char* pSecondEnd = pStr + nLength - 1; // reverse the first part of the string ReverseString(pFirstStart, pFirstEnd); // reverse the second part of the strint ReverseString(pSecondStart, pSecondEnd); // reverse the whole string ReverseString(pFirstStart, pSecondEnd); } } return pStr;}// Reverse the string between pStart and pEndvoid ReverseString(char* pStart, char* pEnd){ if(pStart == NULL || pEnd == NULL) { while(pStart <= pEnd) { char temp = *pStart; *pStart = *pEnd; *pEnd = temp; pStart ++; pEnd --; } }}
- 字符串试题整理OK
- 面试题整理8 字符串的排列
- 面试题整理 1:将一个字符串转换为整数
- 面试题整理 8 字符串排序扩展题
- 华为OJ平台试题 —— 字符串:图片整理
- unity面试题整理(1)--字符串
- 【IT笔试面试题整理】字符串的排列
- 【IT笔试面试题整理】字符串的组合
- ios 字符串转date,模拟器ok,真机不ok,
- ok
- OK!
- ok
- oK
- ok
- ok
- ok
- OK!
- ok
- cookie 与session的 简单区别
- C++对话框系统托盘实现
- 对于dbgrideh如何动态隐藏或者显示列
- UVa 1312
- java垃圾回收那点事(三)不同gc策略的heap分配
- 字符串试题整理OK
- winform 获取 本地ip
- VS2012 编译 PHP C++ 扩展奇遇
- poj1698 Alice's Chance 最大流
- IE6兼容性,双倍距离margin
- apache+tomcat集成多域名
- <UNIX高级环境编程>读书笔记(3)【第7、8章】
- 在Dos环境下(cmd)编译及运行java程序教程
- 利用C#写一个模拟的摇号系统