Я получаю вывод как 4. Каково объяснение этого?
blockquote>В стандарте нет информации о том, как
bitset
должно быть реализовано. Это определенная реализация, посмотрите наbitset header
вашего компилятора.Также существует метод выделения пространства в битах в C ++?
blockquote>Нет, там это не метод выделения пространства в битах в C ++.
Используйте strcmp
.
Это в библиотеке string.h
и очень популярно. strcmp
возвращает 0, если строки равны. См. этот для лучшего объяснения того, что возвращает strcmp
.
В принципе, вы должны сделать:
while (strcmp(check,input) != 0)
или
while (!strcmp(check,input))
или
while (strcmp(check,input))
Вы можете проверить этот , учебник на strcmp
.
Хорошо, несколько вещей: gets
является небезопасным и его следует заменить на fgets(input, sizeof(input), stdin)
, чтобы вы не получили переполнение буфера.
Затем, чтобы сравнить строки, вы должны использовать strcmp
, где возвращаемое значение 0 указывает, что две строки совпадают. Использование операторов равенства (т. Е. !=
) сравнивает адрес двух строк, в отличие от отдельных char
s внутри них.
Также обратите внимание, что, хотя в этом примере он выиграл ' t вызывает проблему, fgets
сохраняет символ новой строки, '\n'
в буферах; gets()
нет. Если вы сравнили вход пользователя с fgets()
с строковым литералом, например "abc"
, он никогда не будет соответствовать (если буфер не был слишком мал, чтобы '\n'
не вписывался в него).
РЕДАКТИРОВАТЬ: и снова победил супер быстрый Мистик.
fgets
должен быть char*
. Но stdin
является FILE*
– Cool Guy
11 February 2015 в 12:08
while (strcmp(check, input))
является достаточным и считается хорошей практикой.
– The Peaceful Coder
28 June 2015 в 15:53
#include<stdio.h>
#include<string.h>
int main()
{
char s1[50],s2[50];
printf("Enter the character of strings: ");
gets(s1);
printf("\nEnter different character of string to repeat: \n");
while(strcmp(s1,s2))
{
printf("%s\n",s1);
gets(s2);
}
return 0;
}
Это очень простое решение, в котором вы получите свой выход, как хотите.
Вы не можете сравнивать массивы напрямую, как это
array1==array2
Вы должны сравнить их char-by-char; для этого вы можете использовать функцию и вернуть значение boolean (True: 1, False: 0). Затем вы можете использовать его в тестовом состоянии цикла while.
Попробуйте следующее:
#include <stdio.h>
int checker(char input[],char check[]);
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
scanf("%s",input);
printf("I will now repeat this until you type it back to me.\n");
scanf("%s",check);
while (!checker(input,check))
{
printf("%s\n", input);
scanf("%s",check);
}
printf("Good bye!");
return 0;
}
int checker(char input[],char check[])
{
int i,result=1;
for(i=0; input[i]!='\0' || check[i]!='\0'; i++) {
if(input[i] != check[i]) {
result=0;
break;
}
}
return result;
}
checker
находит '\0'
в одной из строк, он не проверяет другую строку для '\0'
. Функция возвращает 1
(«равно»), даже если одна строка является только префиксом другой (например, "foo"
и "foobar"
).
– lukasrozs
6 October 2017 в 14:16
Всякий раз, когда вы пытаетесь сравнить строки, сравните их по отношению к каждому символу. Для этого вы можете использовать встроенную строковую функцию strcmp (input1, input2); и вы должны использовать заголовочный файл с именем #include<string.h>
Попробуйте этот код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[]="STACKOVERFLOW";
char s1[200];
printf("Enter the string to be checked\n");//enter the input string
scanf("%s",s1);
if(strcmp(s,s1)==0)//compare both the strings
{
printf("Both the Strings match\n");
}
else
{
printf("Entered String does not match\n");
}
system("pause");
}
К сожалению, вы не можете использовать strcmp
из <cstring>
, потому что это заголовок C ++, и вы специально сказали, что он предназначен для приложения C. У меня была та же проблема, поэтому мне пришлось написать свою собственную функцию, которая реализует strcmp
:
int strcmp(char input[], char check[])
{
for (int i = 0;; i++)
{
if (input[i] == '\0' && check[i] == '\0')
{
break;
}
else if (input[i] == '\0' && check[i] != '\0')
{
return 1;
}
else if (input[i] != '\0' && check[i] == '\0')
{
return -1;
}
else if (input[i] > check[i])
{
return 1;
}
else if (input[i] < check[i])
{
return -1;
}
else
{
// characters are the same - continue and check next
}
}
return 0;
}
Надеюсь, это вам хорошо.