C++ 如何获得字符串的正确索引?
Write函数接收字符串和要在字符串中搜索的字符。如果数组中存在搜索字符,则此函数返回其索引;如果不存在,则返回-1。此外,如果数组包含一个以上的字符匹配项,则返回最左边匹配项的索引。例如,如果字符串为“abab”,搜索字符为“b”,则函数返回1;而如果字符为“c”,则函数返回-1。 不使用任何C++库函数编写函数。 下面是我的功能C++ 如何获得字符串的正确索引?,c++,arrays,C++,Arrays,Write函数接收字符串和要在字符串中搜索的字符。如果数组中存在搜索字符,则此函数返回其索引;如果不存在,则返回-1。此外,如果数组包含一个以上的字符匹配项,则返回最左边匹配项的索引。例如,如果字符串为“abab”,搜索字符为“b”,则函数返回1;而如果字符为“c”,则函数返回-1。 不使用任何C++库函数编写函数。 下面是我的功能 int indexOf(const char str[], char ch) { int search; for (int i = 0; i<
int indexOf(const char str[], char ch)
{
int search;
for (int i = 0; i<20; i++)
{
if (ch = str[i])
search ==i;
else
search =-1;
}
return search;
}
int indexOf(const char str[],char ch)
{
整数搜索;
对于(int i=0;iif(ch=str[i])
应该是if(ch==str[i])
,此时您正在对ch
进行赋值
而search==i
正在做一个比较,它应该是search=i
;所以这是第一个问题的相反问题。if(ch=str[i])
应该是if(ch==str[i])
,此时你正在给ch
做一个作业
而search==i
正在进行比较,它应该是search=i
;因此这是第一个问题的相反问题。我会这样做:
int indexOf(const char str[], int size, char ch)
{
for (int i = 0; i<size; i++)
{
if (str[i] == '\0')
return -1;
else if(str[i] == ch)
return i;
}
return -1;
}
int indexOf(const char str[],int size,char ch)
{
对于(int i=0;i我会这样做:
int indexOf(const char str[], int size, char ch)
{
for (int i = 0; i<size; i++)
{
if (str[i] == '\0')
return -1;
else if(str[i] == ch)
return i;
}
return -1;
}
int indexOf(const char str[],int size,char ch)
{
对于(int i=0;i你犯了一些错误。如果(ch=str[i])应该是如果(ch==str[i])和搜索==i;应该是搜索=i;
而且,如果传递以null结尾的字符串,则无需使用arr的大小
你可以这样试试
int indexOf(const char str[], char ch)
{
for (int idx = 0; str[idx]; idx++)
{
if (str[idx] == ch)
return idx;
}
return -1;
}
你犯了一些错误。if(ch=str[i])应该是if(ch=str[i])和search==i;应该是search=i;
而且,如果传递以null结尾的字符串,则无需使用arr的大小
你可以这样试试
int indexOf(const char str[], char ch)
{
for (int idx = 0; str[idx]; idx++)
{
if (str[idx] == ch)
return idx;
}
return -1;
}
将if(ch=str[i])
更改为if(ch==str[i])
并将search==i;
更改为search=i;
…编译器应该发出警告…应该传递数组的容量,而不是假设(硬编码)容量为20。此外,在if
语句中,将=
更改为=
。此处不需要else
子句。您还应在if
语句块中添加break
语句。一旦找到字符,将退出循环。根据要求,第一个匹配项是winne顺便问一下,为什么当所有东西都闻起来C时,你为什么要标记“C++”?如果(CH=STR [i])/代码> <代码>(CH=STR[i])和<代码>搜索= = i;< /COD> >代码> Stase= i;<代码>……你的编译器应该发出警告……你应该通过数组的容量,而不是假设(硬编码)。容量为20。此外,在if
语句中,将=
更改为=
。此处不需要else
子句。您还应在if
语句块中添加break
语句。一旦找到字符,将退出循环。根据要求,第一个匹配项是winne顺便问一下,为什么当所有的东西都闻到C时,为什么你要标记C++?就像我在额外的位中键入一样),就像我在额外的位中键入:)你的继续条件<代码> STR[IDX]
for循环中的错误!如果字符串结尾前没有“\0”字符,将导致溢出!这就是需要大小的原因!是的,字符串应以null结尾。感谢您指出。您的继续条件str[idx]
for循环中的错误!如果字符串结尾之前没有“\0”字符,将导致溢出!这就是需要大小的原因!是的,字符串应该以null结尾。感谢您指出。我想,只有一个条件:if(str[I]==ch)return i;足够用于循环。因为,它应该与字符串的“\0”有大小关系:)假设字符串是“10111213141516171819”。当到达字符串末尾的9时,仍然没有得到“\0”字符,因为字符串没有空格。因此,循环将前进到一个不应该的内存区域!我想,只有一个条件:if(str[I]==ch)返回i;对于循环来说已经足够了。因为,它应该与字符串的“\0”有一个大小关系:)假设字符串是“10111213141516171819”。当到达字符串末尾的9时,仍然没有得到“\0”字符,因为字符串没有空间容纳它。因此循环将前进到一个不应该的内存区域!