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<

Write函数接收字符串和要在字符串中搜索的字符。如果数组中存在搜索字符,则此函数返回其索引;如果不存在,则返回-1。此外,如果数组包含一个以上的字符匹配项,则返回最左边匹配项的索引。例如,如果字符串为“abab”,搜索字符为“b”,则函数返回1;而如果字符为“c”,则函数返回-1。 不使用任何C++库函数编写函数。 下面是我的功能

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;i
if(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”字符,因为字符串没有空间容纳它。因此循环将前进到一个不应该的内存区域!