长时间潜伏,第一次海报。过去六小时我一直在研究这个问题。
问题:
实施以下功能。每个函数处理空终止的C样式字符串。您可以假设传递给函数的任何char数组都将包含空终止数据。将所有函数放在一个文件中,然后创建一个main()函数来彻底测试函数。
注意:除了strlen()之外,您不能使用任何c-string函数。
我遇到第四个功能有问题。 所需的行为是:此函数返回字符串s中的索引,其中可以首先找到子字符串。例如,如果s是“Skyscraper”而substring是“ysc”,则函数将返回2.如果子字符串未出现在字符串中,则应返回-1。
原型:
int findSubstring(char *str, char substring[])
这是我的两个函数定义开始,我不确定是否正在朝着正确的方向前进,我在将循环迭代保持在脑子里时遇到了很多麻烦,任何帮助都会非常感激。< / p>
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;
}
答案 0 :(得分:0)
//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;
}
答案 1 :(得分:0)
您使用错误的策略在字符串中查找子字符串。外部for
循环需要迭代主字符串,内部for
循环需要遍历子字符串。
假设您在"de"
中寻找"abcdef"
。我发现更易于理解和实施的策略是:
我可以从"de"
0
开始查找"abcdef"
。不,我不能
我可以从"de"
1
开始查找"abcdef"
。不,我不能
我可以从"de"
2
开始查找"abcdef"
。不,我不能
我可以从"de"
3
开始查找"abcdef"
。我可以。返回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;
}