返回子字符串的位置
来源:互联网 发布:自学php教材推荐 知乎 编辑:程序博客网 时间:2024/05/16 17:22
今天在论坛上看了个发问的帖子,是问他的那个程序编译出错是咋回事,我拷了下他的程序,发现是一些看不见的字符有问题(其他人的回答是程序里有全角空格字符),删除之后就OK了。
后来仔细再看他的程序,发现有点问题,他的那个函数原型是int func(char *str, char *substr);目的看str中是否有子字符串substr,如果有则返回第一次出现的位置,如果没有则返回-1。但我使用几组数据测试了下,发现如果substr第一个字符不在str里则返回-1,否则返回这个字符在str里的位置。我根据他的思路修改了一下,能够正确返回子字符串的位置,但由于只测试了几组数据,所以可能会有bug,先记下,后面有时间再仔细看看。
楼主:
#include <iostream>using namespace std;int func(char *str, char *substr){ char *cur = substr; while(*str != '\0') { int count = 0; if(*str == *cur) { while(*cur != '\0') { if(*cur++ == *str++) ; else break; } if(*cur == '\0') return count + 1; cur = substr; } else { str++; count++; } } return -1;}int main(){ char *str = "abcde"; char *substr = "cd"; cout << func(str, substr) << endl; system("pause"); return 0;}
后来修改版:
#include <iostream>using namespace std;int func(char *str, char *substr){int count = -1;int temp = 0;char* cur = str;if(strlen(str) < strlen(substr)){return count;}else{bool flag = false;while(*cur != '\0'){for(unsigned int i=0; i<strlen(substr); ++i) {if(*(cur+i) == *(substr+i)){flag = true;}else{flag = false;break;}}if(flag == true){count = temp;break;}temp++;cur++;}}return count;}int main(){char *str = "abcde";char *substr = "";cout << func(str, substr) << endl;system("pause");return 0;}
- 返回子字符串的位置
- 在已知字符串中查找给定的子串,若找到返回位置,找不到返回-1
- 给定字符串查找子串,返回子串出现的位置
- 在大字符串中返回一个子字符串的的位置
- 返回指定位置的字符串
- 二分法返回字符串的位置
- Python字符串搜索并返回子字符串位置
- 编写算法,对给定的字符串str,返回其最长重复子串及其下标位置
- 28. Implement strStr() (返回子串在字符串中第一次出现的位置)
- 字符串中查找子字符串的位置
- MySQL字符串函数【返回子串位置find_in_set(s1,s2)】
- C语言 查找字符串子串 返回位置
- 从给定字符串中寻找子串,如果存在子串,返回子串初始位置
- 用lastIndexOf方法返回String对象内最后一次出现子字符串的字符位置的示例
- indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回 -1
- 85 返回子字符串的个数
- 按指定分隔符分割数据与从字符串指定位置返回子字符串
- string字符串 获取指定位置范围的子字符串
- vb/vb.net开发精粹(10)
- CentOS 5安装ISPConfig 3主机控制面板详细教程
- (第一篇)FFilmation Glossary 术语
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-2
- 干货——货币供应量
- 返回子字符串的位置
- eclipse 无法启动 JVM terminated. Exit code=-1 的解决办法
- 网络字节序和主机字节序
- PreparedStatement 查询大容量数据内存溢出解决
- gamit 处理超快速星历
- Play picture alternatively
- [学习记号 - MVVM] 在子窗体中给控件设置焦点(focus)
- varchar与nvarchar
- C++ Builder 利用 Hook 控制 Panel 实现自动工具栏或自动菜单,无需鼠标单击即可弹出菜单