2
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int n;
    cin >> n;

    string a;
    cin >> a;

    int index;

    for(int i=0;i<strlen(a);i++)
    {
        if(a[i]=="?")
        {
            index=i;
        }
    }

    cout << index;

    return 0;
}

我想找到“?” 如果有的话,在字符串中,但我得到错误:“ISO C++ 禁止指针和整数之间的比较”

有什么帮助吗?

4

7 回答 7

7

在 '?' 周围使用单引号 字符来指示字符而不是字符串。这就是你的比较失败的原因。

于 2013-02-26T00:19:04.223 回答
5

A:在你的 for 循环中混合 C++ 字符串和旧的 C 风格 (strlen) 函数(a.length()改用)

B:将 C 字符串与字符进行比较if(a[i]=="?")应该是if(a[i]=='?')(使用单引号来比较字符 - 双引号使其成为字符串比较,实际上是指针比较,并且不会按照您的预期进行)

于 2013-02-26T00:19:47.557 回答
4

除了其他答案之外,您的程序可以使用一些方便的内置函数简化为以下内容:

#include <iostream>
#include <string>

int main()
{
    std::string a;
    std::getline(std::cin, a);

    int index;

    auto pos = a.find("?");

    if (pos != std::string::npos)
      index = pos;
   else
      index = -1;

    std::cout << index;
}

建议:

  • 使用<string>代替<cstring>,
  • 处理输入和字符串时,使用std::getline而不是std::cin消耗整行,
  • std::string::find是比手动循环更好的选择。
于 2013-02-26T00:29:37.833 回答
2

有什么帮助吗?

  1. 您不能在对象 std::string 的实例上调用 c 函数 strlen() 而是使用 std::string::length()
  2. std::string 的 operator[] 返回您试图与类型为 const char * 的字符串常量进行比较的 char 类型
  3. 您使用未初始化的变量索引,如果您的条件从未成功(假设您最终修复它),您将无法找到它
  4. std::string 具有 find() 方法,如果找不到则返回字符串中的位置或常量 std::string::npos
于 2013-02-26T00:25:05.013 回答
1

内嵌评论...

#include <iostream>
//#include <cstring> // You don't need this
#include <string> // You do need this

// using namespace std; // You don't need this

int main()
{
    // int n; // This is not used
    // cin >> n; // Nor is this

    std::string user_input; // Use std:: and meaningful variable names
    std::cin >> user_input; // "

    int index = user_input.find('?'); // This is the simplest way to find a character

    // for(int i=0;i<strlen(a);i++) // strlen() does not work here
    // {
    //  if(a[i]=="?") // chars are quoted with single quotes, as above. This is {'a', '\0'}
        //{
            // index=i; You could break here, too, otherwise you'll reurn the last '?'
        //}
    // }

    std::cout << index;

    // return 0; // This is unnecessary
}
于 2013-02-26T00:31:25.803 回答
0

"?"在内存中创建一个字符串。一个常量字符串 like"?"将指向内存中地址的开始。因此它是一个指针。

'?'就地创建单个字符,并且不创建指针。因此,当与另一个字符或整数进行比较时,ISO C++ 禁止您尝试将整数(或字符)与指针(例如字符串)进行比较。

所以应该是

    if(a[i]=='?')
    {
        index=i;
    }
于 2013-02-26T00:38:45.683 回答
0

在这里,我将演示如何从 std::string 中找到一个*问号('?'):请务必阅读评论!

int main( void )
{
    // DECLARE LOCAL VARIABLES
    // Declare strA as std::string
    std::string strA = "";
    // Declare nIndex as int. We set the value of it to -1 to let us know
    // if there were any '?' within strA
    int nIndex = -1;

    // INITIALIZE
    // Set the value of strA to the line that was inputted
    // You might want to loop this until the length of strA
    // is greater than 0
    std::getline( std::cin, strA );

    // SEARCH FOR THE FIRST '?'
    // if std::string::find returns -1, then no '?' was found within strA
    nIndex = strA.find( '?' );

    // CHECKING AND PRINTING nIndex
    // Remember why strA is -1?
    if( nIndex == -1 )
        std::cout << "The inputted string does not contain any '?'...\n";
    else std::cout << "The first '?' is found at: " << nIndex;

    // DONE

#ifdef DEBUG
    std::cout << "\nDebugging > Paused! Enter any key to continue...\n";
    ::getchar( );
#endif // DEBUG
    return( 0 );
};
于 2013-02-26T01:05:41.063 回答