此乃字符串处理的典型例题,不知到为什么在Ubuntu下提示没有strrev函数,可能是编译器的问题吧。
代码如下:
/* * *Declaration:The author of <<Accelerated C++>> has wrote in the end of that book: As you look for reading materimal, keep in mind that books on the shelf do not make you a better programmer. Ultimately, the only way to improve your programming is to write programs. >这些程序来自一些ACM书籍,作者只为提高编程能力,实现书中例题或练习。如有侵权,请联系作者,作者将立即删除。 * *联系邮箱:mingxinglai#gmail.com * */ /* 熟练掌握下列几个字符串处理函数,确保程序代码简洁,高效 strlen: 计算字符串的长度 strncpy:复制字符串的字串 strcpy:复制字符串 strstr:在字符串中寻找子串 strrev:对字符串进行反顺序 */ #include <stdio.h> #include <string.h> int t, n; char str[100][101]; char * strrev( char *p) { int strLen = strlen(p); int i = 0; char temp; for( i = 0; i < strLen / 2; i++) { temp = p[i]; p[i] = p[ strLen - i -1]; p[strLen - i - 1] = temp; } return p; } int searchMaxSubString( char* source) { int subStrLen = strlen(source), sourceStrLen = strlen(source); int i, j; bool foundMaxSubStr; char subStr[101], revSubStr[101]; while( subStrLen > 0 ) { for( i = 0; i <= sourceStrLen - subStrLen; i++) { strncpy( subStr, source + i, subStrLen); strncpy( revSubStr, source + i, subStrLen); subStr[subStrLen] = revSubStr[subStrLen] = '\0'; strrev( revSubStr); foundMaxSubStr = true; for( j = 0; j < n; j++) if( strstr(str[j], subStr) == NULL && strstr( str[j], revSubStr) == NULL) { foundMaxSubStr = false; break; } if( foundMaxSubStr) return (subStrLen); } subStrLen--; } return 0; } int main(int argc, char* argv[]) { int i, minStrLen, subStrLen; char minStr[101]; scanf("%d", &t); while( t--) { scanf("%d", &n); minStrLen = 100; for( i = 0; i < n; i++) { scanf("%s", str[i]); if( strlen(str[i]) < minStrLen) { strcpy( minStr, str[i]); minStrLen = strlen( str[i] ); } } subStrLen = searchMaxSubString( minStr ); printf("%d\n", subStrLen); } return 0; }
您还没有登录,请您登录后再发表评论
4.4 算法设计题 1.编写算法,从串 s 中删除所有和串 t 相同的子串。 解析:可以通过遍历串 s 和串 t,比较它们的子串是否相等,并删除相等的子串。 2.写一个递归算法来实现字符串逆序存储,要求不另设存储空间...
4.4 串的模式匹配算法 串的模式匹配算法是指在一个串中查找另一个串的出现位置。常见的模式匹配算法有 Brute Force Algorithm、Rabin-Karp Algorithm、Knuth-Morris-Pratt Algorithm 等。 本章我们详细介绍了串的...
i--) printf("%4.4ld", a[i]); // 输出其余各位 return w; // 返回位数 } ``` #### 2. 精度计算——乘法(大数乘小数) **功能描述:** 实现大数与小数之间的乘法运算。通常情况下,大数采用字符串形式存储,而...
i--) printf("%4.4ld", a[i]); return w; } ``` **解析**: - 使用数组`a[]`来存储大数阶乘的结果,每一位存储在一个元素中。 - 循环遍历计算阶乘,每次将当前数与之前的结果相乘,并更新数组。 - 计算结果的位数...
##### 4.4 Boyer-Moore 算法示例 假设主串 T = "abaccbabbazz",模式串 P = "cbadcba"。 - 使用 Bad-Character Heuristic:根据不匹配字符 'd' 在 P 中的位置来移动 P。 - 使用 Good-Suffix Heuristic:根据 P 中已...
4.4 MFC编程技术 101 0205 根据位图资源ID获取位图大小 101 0206 将某个控件对象关联到对话框中的控件资源 102 0207 将一个全局函数指针关联到对话框类的某个方法 102 0208 修改应用程序的图标 102 0209 ...
4.4 计算逆波兰式的值 5. 树 5.1 二叉树的遍历 5.1.1 二叉树的前、中、后序遍历 5.1.2 二叉树的层序遍历 5.1.3 恢复二叉树[hard] 5.1.4 判断两棵树是否相等 5.1.5 判断二叉树是否为AVL树 5.1.6 将二叉树转为链表 ...
- (6-3x+4.4x^2-1.2x^9)-(-6-3x+5.4x^2+7.8x^15) - (x+x^2+x^3)+0 - (x+x^3)-(-x-x-3) 3. **通讯录的制作** - **功能实现**: 1. **输入信息**:使用`enter()`函数输入联系人的基本信息。 2. **显示信息**:...
4.4 处理字符 106 4.4.1 关于字符的必要信息 107 4.4.2 代理对 107 4.4.3 组合字符 112 4.5 格式化Unicode字符串 114 4.6 字符串用作资源 115 4.7 小结 119 第5章 正则表达式 120 5.1 System.Text.Regular...
#### 4.4 前向界定符 前向界定符如`(?=...)`和`(?)`用于匹配紧跟在指定模式之后或之前的文本。 ### 5. 修改字符串 #### 5.1 将字符串分片 使用正则表达式可以方便地切割字符串,例如`split()`函数。 #### 5.2 ...
例如,-4.4 经过 `floor()` 函数计算后的结果为 -5.0,因为它返回小于等于-4.4的最大整数。 ### 12. 局域网与广域网对比 局域网(LAN)与广域网(WAN)相比,LAN具有更好的有效性和更高的可靠性。这是因为局域网覆盖的...
3. **Berkeley Unix**:包括4.2BSD、4.3BSD、4.4BSD等版本,glibc实现了这些版本中的非标准化函数。 4. **SVID (System V Interface Definition)**:描述AT&T Unix System V操作系统的文档,glibc支持了大部分SVID...
**4.4 选择除了特定元素外的所有元素** 选择除了特定元素外的所有元素可以通过使用`except`运算符实现。 **4.5 进行先序遍历** 进行先序遍历可以通过递归模板实现。 **4.6 进行后序遍历** 进行后序遍历同样可以...
可以使用循环遍历字符串,找到需要替换的子串,然后使用 splice 方法来实现替换。 5.2 url 解析 题目 中,考察了 url 解析的方法。可以使用 URL 对象或解析 url 字符串来实现 url 解析。 5.3 缓存机制 题目 中,...
- **子串**(4.4 例题):字符串查找和匹配,可以采用KMP、Boyer-Moore或Rabin-Karp算法。 - **字符串判等**(4.1 练习题):学习如何比较两个字符串是否相等,理解字符串的比较操作。 4. **日期与时间**: - **...
相关推荐
4.4 算法设计题 1.编写算法,从串 s 中删除所有和串 t 相同的子串。 解析:可以通过遍历串 s 和串 t,比较它们的子串是否相等,并删除相等的子串。 2.写一个递归算法来实现字符串逆序存储,要求不另设存储空间...
4.4 串的模式匹配算法 串的模式匹配算法是指在一个串中查找另一个串的出现位置。常见的模式匹配算法有 Brute Force Algorithm、Rabin-Karp Algorithm、Knuth-Morris-Pratt Algorithm 等。 本章我们详细介绍了串的...
i--) printf("%4.4ld", a[i]); // 输出其余各位 return w; // 返回位数 } ``` #### 2. 精度计算——乘法(大数乘小数) **功能描述:** 实现大数与小数之间的乘法运算。通常情况下,大数采用字符串形式存储,而...
i--) printf("%4.4ld", a[i]); return w; } ``` **解析**: - 使用数组`a[]`来存储大数阶乘的结果,每一位存储在一个元素中。 - 循环遍历计算阶乘,每次将当前数与之前的结果相乘,并更新数组。 - 计算结果的位数...
##### 4.4 Boyer-Moore 算法示例 假设主串 T = "abaccbabbazz",模式串 P = "cbadcba"。 - 使用 Bad-Character Heuristic:根据不匹配字符 'd' 在 P 中的位置来移动 P。 - 使用 Good-Suffix Heuristic:根据 P 中已...
4.4 MFC编程技术 101 0205 根据位图资源ID获取位图大小 101 0206 将某个控件对象关联到对话框中的控件资源 102 0207 将一个全局函数指针关联到对话框类的某个方法 102 0208 修改应用程序的图标 102 0209 ...
4.4 计算逆波兰式的值 5. 树 5.1 二叉树的遍历 5.1.1 二叉树的前、中、后序遍历 5.1.2 二叉树的层序遍历 5.1.3 恢复二叉树[hard] 5.1.4 判断两棵树是否相等 5.1.5 判断二叉树是否为AVL树 5.1.6 将二叉树转为链表 ...
- (6-3x+4.4x^2-1.2x^9)-(-6-3x+5.4x^2+7.8x^15) - (x+x^2+x^3)+0 - (x+x^3)-(-x-x-3) 3. **通讯录的制作** - **功能实现**: 1. **输入信息**:使用`enter()`函数输入联系人的基本信息。 2. **显示信息**:...
4.4 处理字符 106 4.4.1 关于字符的必要信息 107 4.4.2 代理对 107 4.4.3 组合字符 112 4.5 格式化Unicode字符串 114 4.6 字符串用作资源 115 4.7 小结 119 第5章 正则表达式 120 5.1 System.Text.Regular...
#### 4.4 前向界定符 前向界定符如`(?=...)`和`(?)`用于匹配紧跟在指定模式之后或之前的文本。 ### 5. 修改字符串 #### 5.1 将字符串分片 使用正则表达式可以方便地切割字符串,例如`split()`函数。 #### 5.2 ...
例如,-4.4 经过 `floor()` 函数计算后的结果为 -5.0,因为它返回小于等于-4.4的最大整数。 ### 12. 局域网与广域网对比 局域网(LAN)与广域网(WAN)相比,LAN具有更好的有效性和更高的可靠性。这是因为局域网覆盖的...
3. **Berkeley Unix**:包括4.2BSD、4.3BSD、4.4BSD等版本,glibc实现了这些版本中的非标准化函数。 4. **SVID (System V Interface Definition)**:描述AT&T Unix System V操作系统的文档,glibc支持了大部分SVID...
**4.4 选择除了特定元素外的所有元素** 选择除了特定元素外的所有元素可以通过使用`except`运算符实现。 **4.5 进行先序遍历** 进行先序遍历可以通过递归模板实现。 **4.6 进行后序遍历** 进行后序遍历同样可以...
可以使用循环遍历字符串,找到需要替换的子串,然后使用 splice 方法来实现替换。 5.2 url 解析 题目 中,考察了 url 解析的方法。可以使用 URL 对象或解析 url 字符串来实现 url 解析。 5.3 缓存机制 题目 中,...
- **子串**(4.4 例题):字符串查找和匹配,可以采用KMP、Boyer-Moore或Rabin-Karp算法。 - **字符串判等**(4.1 练习题):学习如何比较两个字符串是否相等,理解字符串的比较操作。 4. **日期与时间**: - **...