在C++中查找 c 字符串子字符串时遇到问题
Trouble with finding a c-string substring in C++
长期潜伏者,第一次海报。在过去的六个小时里,我一直在研究这个问题。
问题:
实现以下功能。每个函数处理以空结尾的 C 样式字符串。您可以假设传递到函数中的任何 char 数组都将包含以 null 结尾的数据。将所有函数放在一个文件中,然后创建一个 main() 函数来彻底测试函数。
注意:您不能使用 strlen() 以外的任何 c 字符串函数。
我在使用第四个功能时遇到问题。所需的行为是:此函数返回字符串 s 中的索引,其中首先可以找到子字符串。例如,如果 s 是"摩天大楼",子字符串是"ysc",则该函数将返回 2。如果子字符串未出现在字符串中,则应返回 -1。
原型:
int findSubstring(char *str, char substring[])
这是我对函数定义的两个开始,我不确定任何一个是否朝着正确的方向发展,我在保持循环迭代时遇到了很多麻烦,任何帮助将不胜感激。
int findSubstring(char *str, char substring[]){
int subS = -1, index1 = 0, index2 = 0;
int length1 = (strlen(str) - 1);
int length2 = (strlen(substring) - 1);
if(length1 > length2){
for(int i = 0; i <= length2; i++){
for(int j = 0; j <= length1; j++){
if(*(substring + i) == *(str + j) && *(substring +i) != ' ' ){
i++;
if(index1 == 0){
index1 = i;
}
}
if( *(substring + i) == ' '){
subS = i + 2;
}
}
}
}
if (length1 < length2){
cout << "Invalid, substring exceeds size of string!" << endl;
}
return subS;
}
int findSubstring(char *str, char substring[]){
int index = -1;
int lengthStr = (strlen(str) - 1);
int lengthSub = (strlen(substring) - 1);
if (lengthStr < lengthSub){
cout << "Invalid input, substring exceeds size of string!" << endl;
}
if( lengthSub == 0){
cout << "";
}
if (lengthStr > lengthSub){
for(int i = 0; i <= lengthSub; i++){
for(int j = 0; j <= lengthStr; j++){
}
return index;
}
//You can replace my str.size() and subString.size() by the size of each c-string.
int stringPointerOperation( string str, string subString )
{
int pos=0;
bool notFound;
for(int i = 0; i < str.size() ; i++)
{
notFound= false;
if(str[i] == subString[0])
{
pos=i;
for(int k = 0 ; k < subString.size() && k < str.size() ; k++,i++)
{
if(subString[k] != str[i] )
{
notFound=true;
break;
}
}
}
}
if(notFound)
return -1;
else
return pos;
}
您使用了错误的策略来查找字符串中的子字符串。外部for
循环需要遍历主字符串,内部for
循环需要遍历子字符串。
假设您正在寻找"abcdef"
"de"
。我发现更容易理解和实施的策略是:
我能从"abcdef"
0
开始找到"de"
吗?不,我不能。
我能从"abcdef"
1
开始找到"de"
吗?不,我不能。
我能从"abcdef"
2
开始找到"de"
吗?不,我不能。
我能从"abcdef"
3
开始找到"de"
吗?是的,我可以。返回3
.
这是一个适合我的版本。
int findSubstring(char *str, char substring[]){
int i;
int j;
int length1 = strlen(str);
int length2 = strlen(substring);
if(length1 < length2){
std::cout << "Invalid, substring exceeds size of string!" << std::endl;
return -1;
}
for(i = 0; i < length1; i++){
for(j = 0; j < length2; j++){
// The index to use access the element of str
// needs to be offset by i.
if( str[i+j] != substring[j] )
{
break;
}
}
if ( j == length2 )
{
return i;
}
}
return -1;
}
相关文章:
- 编译包含字符串的代码时遇到问题
- 在将字符串放入字符串向量时遇到问题?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- Winsock2:当我尝试发送带有空格的字符串时,该函数在遇到空格时似乎停止发送
- 我不明白尝试使用字符串作为函数参数时遇到的错误
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 我在将字符串拆分为向量时遇到困难
- 我在 c++ 中声明字符串类型时遇到问题
- 打印较大的字符串时遇到问题 C++
- 我在内存泄漏和字符串方面遇到了一个非常奇怪的问题
- 打印我的字符串阵列时,会遇到细分错误
- 为什么我会在试图计算字符串字母的程序中遇到此错误
- 我在使用 cin.getline() 从用户那里获取 3 个字符串并使用指针数组来存储它们时遇到问题
- C++字符串表达式求解器遇到访问冲突
- 编译器在遇到提取或插入运算符时处理信息(字符串、操纵器等)的顺序是什么?
- 是否可以创建一个字符串数组,如果是的话,为什么我会遇到此错误:错误:预期表达式
- 为什么我会遇到细分错误?将输出作为数字而不是字符串的原因是什么?
- 为什么此代码在遇到换行符之前无法正确读取字符串?
- 从一个字符串中获取 2-5 个连续的单词短语,我得到了 2 个工作,但在做 3 个时遇到麻烦
- 遇到字符串::查找的问题