我想输入一个字符串,如果它包含两个连续的" 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的初学者,请纠正我的代码。 在此先感谢您的回答。
答案 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;
}
您收到的警告是因为您一次将char
与string HH
str[i] == "HH"
进行比较