Мой опыт программирования чрезвычайно разбросан, и я не могу найти ответ на то, что я надеюсь, это простой вопрос. На прошлой неделе у меня было задание, что я не закончил правильно, и это подвело меня до смерти.Алфавитное сравнение двух строк в C
Я должен был сравнить две строки в алфавитном порядке, не используя strcmp, и выяснить, какая строка сначала в алфавитном порядке с помощью указателей.
int strcmp373(char *str1, char *str2) {
while(*str1 != '\0')
{
str1++;
}
while(*str2 != '\0')
{
str2++;
}
if(*str1 == *str2)
}
Это моя ужасная попытка, мой мыслительный процесс заключается в том, чтобы использовать значение с нулевым завершением. Я надеялся, что смогу понять и объяснить, как это работает?
Настоящая копия спецификации присваивания для справки.
Напишите функцию strcmp373, которая сравнивает две строки точно так же, как strcmp делает в библиотеке C. На этот раз, пожалуйста, используйте «синтаксис указателя» при написании этой функции. То есть, оператор [] не должен использоваться вообще при обращении к конкретным символам в строках1 и строке2; вместо этого все параметры и локальные переменные должны быть объявлены как указатели (с использованием символа *). Убедитесь, что вы эмулируете функцию strcmp C. Обратите внимание, что strcmp возвращает 0, если две строки равны, хотя значение 0 обычно означает false в C. Знак других значений возвращаемых значений используется для указания того, каким образом строки не совпадают, но точное возвращаемое значение не имеет значения , Для завершения этого кода вы не можете использовать какие-либо встроенные функции библиотеки строк C.
Вот прототип этой функции:
int strcmp373(char *, char *);
А вот главная функция, которую вы можете использовать для тестирования strcmp373.
#include <stdio.h>
#include "hw3.h" // to be discussed
int main() {
char str1[81], str2[81];
char again = 'y', newline;
while (again == 'y') {
printf("Enter a string\n");
scanf("%s", str1);
printf("Enter another string\n");
scanf("%s", str2);
int comp = strcmp373(str1, str2);
if (comp < 0)
printf("%s is alphabetically before %s\n", str1, str2);
else if (comp > 0)
printf("%s is alphabetically after %s\n", str1, str2);
else printf("%s and %s are the same\n", str1, str2);
printf("Again? (y/n)\n");
scanf("%c%c", &newline, &again);
}
}
Это всегда будет сравнивать только конечные нули ... – usr2564301
Возможные дубликат [Как отсортировать массив строки в алфавитном порядке (чувствительно к регистру, нестандартную сверку)] (http://stackoverflow.com/questions/12646734/how-to-sort-an-array-of-string-alphabetical-case-sensitive-nonstandard-colla) –
@ Lashane: этот предлагаемый дубликат специально запрашивает * нестандартный * сопоставление - это вот «обычное» сравнение. – usr2564301