blockquote>
it is command line based c program to check for palindrome string and my answer is coming right but i had to supply arguments 2 times in the terminal....
Ваша программа не может дать правильные результаты, потому что цикл
for
используется для определения того, является ли входная строка палиндром или не повторяется не один раз. [подробнее см. ниже]Я не знаю, что именно означает -
i had to supply arguments 2 times in the terminal
By глядя на ваш код, могу только сказать, что вы должны передать строку (чтобы проверить, является ли она палиндром или нет) в качестве аргумента командной строки, и поскольку ваш
main()
имеетgets()
, поэтому он останавливается там и ждет ввода пользователя и там вы должны указывать ту же строку, которую вы передаете в качестве аргумента командной строки для программы. Кажется, это то, что вы подразумеваете под своим утверждением -i had to supply arguments 2 times...
Прежде всего, не используйте gets (). Это небезопасно и, кроме того, оно устарело. Проверьте на этом . Вместо этого используйте fgets (). Проверьте этот .
Есть два способа получить вход -
- Возьмите его у пользователя во время выполнения (вы можете использовать
fgets()
для это)- Передайте его как аргумент командной строки
Так как в аннотациях вы упомянули -
it is command line based c program to check for palindrome string and my answer is...
Итак, в моем ответ, я буду принимать ввод как аргумент командной строки.Если вы используете компилятор
gcc
, программа компиляции с параметрами-Wall -Wextra
и компилятором выдает предупреждающее сообщение для этого оператора(argv[1]) == string;
warning: statement with no effect
В цикле
for
функцииpalindrome()
вы прерываете цикл на первой итерации:for (i = 0; i < strlen(string); i++) { if (string[i] == string[strlen(string) - i - 1]) flag = 1; break; // <--- will break the loop in first iteration }
И функция
palindrome()
заканчивает сообщение о палиндроме на основе того, будет ли первый и последний символ входной строки такой же или нет.Вы должны разбить цикл только тогда, когда любой символ в позиции
i
в первой половине строки не совпадает с символом в позицииstring_len - i -1
во второй половине строки. Кроме того, вам не нужно итерировать всю строку, чтобы проверить, является ли она палиндром или нет:for (i = 0; i < strlen(string); i++) { ^^^^^^^^^^^^^
Вам просто нужно перевести строку в ее середину, чтобы определить, является ли строка палиндром или нет .
Тип возврата
strlen()
-size_t
, который являетсяunsigned integer
. Итак, лучше взять итератор цикла одного и того же типа.Между заголовком файла и скобкой угла открытия и закрытия не должно быть пробелов
<,>
:#include < stdio.h > #include < string.h >
Пока ищет заголовочный файл, компилятор также включает пробел в имени и не обрезает ведущее и конечное пространство и сообщит об ошибке
' stdio.h '
заголовочного файла.Объединяя все это вместе, вы можете сделать :
#include
#include int palindrome(char *p_string) { int flag = 0; size_t len = strlen(p_string); if (len == 1) flag = 1; for (size_t i = 0; i < (len/2); i++) { if (p_string[i] == p_string[len - i - 1]) flag = 1; else break; } if (flag == 1) printf("palindrome string\n"); else printf("not palindrome string\n"); return 0; } int main(int argc, char * argv[]) { /* Check for number of expected arguments */ if (argc != 2) { fprintf (stderr, "Invalid number of arguments\nUsage:%s \n", argv[0]); return -1; } palindrome(argv[1]); return 0; } Вы можете использовать его следующим образом:
$ ./a.out abc not palindrome string $ ./a.out aba palindrome string $ ./a.out abccba palindrome string
Согласно Документации , @Html.AntiForgeryToken()
не нужно добавлять, поскольку используемой разметки должно быть достаточно:
<form method="post">
...
</form>
Я бы проверил, что токен установить в нижней части формы, как указано в этой статье