指针和字符串之间的警告比较

时间:2017-12-10 07:54:39

标签: c string pointers integer

我想输入一个字符串,如果它包含两个连续的" HH"然后它应该打印出来"瞧瞧"如果屏幕不包含它应该返回" No voila"

int main()
{   

 char str[100];
 printf("Enter string");      
 scanf("%s",str);   

for (i=0;i<strlen(str); i++)
{


    if (str[i] && str[i+1] == "HH" )
    {
        printf("voila");
    }
    else{
        printf("No voila");
    }

 }
return 0;
 }

如果扫描一个字符串,并且它包含两个连续的&#34; H&#34;它应该打印出来瞧

我得到的警告是指针和整数之间的比较 因为我是c的初学者,请纠正我的代码。 在此先感谢您的回答。

4 个答案:

答案 0 :(得分:2)

你说:

  

如果它包含两个连续的&#34; HH&#34;然后它应该打印出来&#34;瞧瞧&#34;到屏幕

我假设你的意思是连续两个H,而不是连续两个"HH"

首先,您需要查找"HH",而对于后者,您需要查找"HHHH"

在任何一种情况下,您都需要使用strstr

if ( strstr(str, "HH") != NULL ) 
{
    printf("voila");
}

答案 1 :(得分:1)

"HH"这是字符串文字,当我们在比较中使用它时,它的地址与正在比较的字符str[i]的ascii值进行比较。这就是你收到警告信息的原因。

解决方案是使用strcmp(str,"HH")==0然后打印voila。(因为这意味着str"HH"匹配。)

你不需要这里的循环。所以你只需要这样做

if( strcmp(str,"HH") == 0)
    printf("voila");
else
    printf("No voila");

编辑:(错过了HH

连续两次出现的部分)

再次,如果你需要找到连续出现,那么这个解决方案将无法正常工作,因为这与内容完全匹配。然后,您需要使用strstr或类似的函数来查找字符串中子字符串的出现。

从标准7.24.5.7

 char *strstr(const char *s1, const char *s2);
  

strstr函数定位指向的字符串中的第一个匹配项   到s1字符序列(不包括终止空值)   s2指向的字符串中的字符)。   strstr函数返回指向所定位字符串的指针,或 null   指针如果找不到字符串

没有任何功能:

要查找单次出现,您也可以这样做

for(size_t  i = 0;  i<=strlen(str)-2; i++)
    if( str[i] == 'H' && str[i+1] == 'H'){
       printf("Voila");
       return 0;
    }
printf("No voila");
return 0;

请注意,我们正在与'H'字符进行比较而不是文字"H"

答案 2 :(得分:0)

你可以试试这个:

for (i=0;i<strlen(str); i++)
{    
    int flag=0;
    if (str[i] == "H" )
    {
       if(flag>0)
       {
        printf("voila");
       } else {
          flag++;
       }
    } else {
       flag=0;
       printf("No voila");
    }
 }

答案 3 :(得分:0)

这应该有所帮助:

#include <stdio.h>
#include <string.h>

int main()
{


char str[100];
printf("Enter string");

scanf("%s",str);
int flag = 0;

for (int i=0;i<strlen(str) - 1; i++)
{


    if (str[i] == 'H' && str[i+1] == 'H')
    {

        flag = 1;
        break;
    }
 }

if (flag){
    printf("voila");
}
else {
    printf("no voila");
}
return 0;
 }

您收到的警告是因为您一次将charstring HH str[i] == "HH"进行比较