C++ 在c+;中查找c字符串子字符串时遇到问题+;
长期潜伏者,第一次海报。在过去的六个小时里,我一直在研究这个问题 问题: 实现以下功能。每个函数都处理以null结尾的C样式字符串。您可以假设传入函数的任何字符数组都将包含以null结尾的数据。将所有函数放在一个文件中,然后创建一个彻底测试函数的main()函数 注意:除了strlen()之外,您不能使用任何c字符串函数 我对第四个函数有问题。 所需的行为是:此函数以字符串s的形式返回可以首先找到子字符串的索引。例如,如果s为“摩天大楼”,子字符串为“ysc”,则函数将返回2。如果子字符串未出现在字符串中,则应返回-1 原型:C++ 在c+;中查找c字符串子字符串时遇到问题+;,c++,c-strings,C++,C Strings,长期潜伏者,第一次海报。在过去的六个小时里,我一直在研究这个问题 问题: 实现以下功能。每个函数都处理以null结尾的C样式字符串。您可以假设传入函数的任何字符数组都将包含以null结尾的数据。将所有函数放在一个文件中,然后创建一个彻底测试函数的main()函数 注意:除了strlen()之外,您不能使用任何c字符串函数 我对第四个函数有问题。 所需的行为是:此函数以字符串s的形式返回可以首先找到子字符串的索引。例如,如果s为“摩天大楼”,子字符串为“ysc”,则函数将返回2。如果子字符串未出现
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) != '\0' ){
i++;
if(index1 == 0){
index1 = i;
}
}
if( *(substring + i) == '\0'){
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;
}
int findSubstring(char*str,char substring[]){
int subS=-1,index1=0,index2=0;
int length1=(strlen(str)-1);
int length2=(strlen(子字符串)-1);
如果(长度1>长度2){
对于(int i=0;i//可以用每个c字符串的大小替换str.size()和subString.size()。
int stringPointerOperation(字符串str、字符串子字符串)
{
int pos=0;
布尔未发现;
对于(int i=0;i
在字符串中查找子字符串时使用了错误的策略。外部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;
}
int findSubstring(char*str,char substring[]){
int i;
int j;
int length1=strlen(str);
int length2=strlen(子字符串);
如果(长度1<长度2){
std::cout And?当您运行它时会发生什么?它是如何失败的,有哪些参数?当您用铅笔和纸处理它时会发生什么?现在,我看到您的代码…很混乱。首先解决一个简单的问题。尝试编写一个函数,测试子字符串是否出现在给定字符串的开头(如果子字符串比字符串长,不要大惊小怪,只需返回false
)。一旦工作正常,请返回更大的问题。
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;
}