Листинг 5. Имитация функции gets()

/*getstr.c*/main()                    {                    char name[10], letter;                    int index;                    index = 0;                    puts("Введите имя, по окончании нажмите Enter\n");                    do                                   {                                   letter = getchar();                                   name[index] = letter;                                   index++;                                   }                    while (letter!='\r' && index < 9);                    name[index] = '\0';                    putchar('\n');                    puts(name);                    }

К счастью, язык Си расценивает строки как особую разновидность массивов, позволяя осуществлять ввод и вывод строк как единого целого. Однако какие-либо дополнительные приемы обращения со строками в языке Си отсутствуют. В то же время, использование строк настолько распространено в программировании, что большинство Си и Си++ компиляторов имеют специальные функции для работы со строками. Конечно, для этих целей можно написать и собственные функции, но использование стандартных библиотек представляется более эффективным.

В качестве примера мы обсудим несколько функций работы со строками и посмотрим, какие инструкции следует написать, чтобы выполнить те же действия без использования библиотечных функций.

Сравнение двух строк

В Си и Си++ нельзя непосредственно сравнить значение двух строк с помощью, например, такого условия:

if (string1 == string2)


Рис. 8. Синтаксис функции strcmp()

Однако большинство библиотек содержит функцию strcmp(), которая возвращает нулевое значение в том случае, если строки одинаковы, либо значение, отличное от нуля, если строки не совпадают. Синтаксис функции strcmp() показан на рис. 8. Эта функция используется в программе следующим образом:

if (strcmp(name1, name2) == 0)                    puts("Имена совпадают");else                    puts("Имена не совпадают");

Некоторые компиляторы возвращают отрицательное число, если первая строка оказывается с точки зрения алфавита «меньше» второй, и положительное число, если «больше».

Если компилятор не имеет функции strcmp(), можно написать собственную функцию, которая сравнивала бы две сроки элемент за элементом как параллельные массивы, и останавливалась при обнаружении пары несовпадающих значений:

main()                    {                    int index, flag;                    char name[10], name1[10];                    gets(name);                    gets(name1);                    flag = 0;                    for (index = 0; index < 10; index++)                                   if (name[index]!= name1[index])                                                  {                                                  flag = 1;                                                  break;                                                  }                                   if (flag == 1)                                                  puts("Строки не совпадают");                                   else                                                  puts("Строки совпадают");                    }

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: