Ввод-вывод строковых данных
При вводе строк, как и символов, используется функция scanf(). При этом для форматного ввода и вывода строк используется спецификатор %s. Однако нажатие клавиши [Enter] или клавиши [пробел] не является значимым символом. При вводе строки с помощью функции scanf() нажатие одной из этих клавиш формирует символ конца строки. Таким образом надо помнить, что функция scanf() позволяет записать в строку только одно слово.
Пример.Организовать ввод ФИО студента.
char fam[20];
printf ("Введите фамилию и инициалы студента");
scanf("%s", fam);
На клавиатуре строка набирается без кавычек, например:
Андреева С.В. [Enter]
Одновременно с вводом строки в байт с индексом восемь запишется символ с кодом 0. Инициалы студента в эту строку записаны не будут, так как пробел после фамилии будет воспринят командой scanf как конец строки.
Для ввода текста содержащего пробелы следует использовать специальную функцию gets(). При вводе строки с помощью этой функции только нажатие клавиши [Enter] сформирует символ конца строки.
Так, например, в предыдущей задаче:
char fam[20];
printf(“Введите фамилию и инициалы студента”);
gets(fam);
использование функции gets() позволит записать в строку fam не только фамилию, но и инициалы.
Вывод строк осуществляется с помощью функции printf() и специальной функции puts(). Например, оператор
printf(“| %20s|”,fam);
выведет на экран в правую часть поля из 20 позиций строку fam:
| Андреева С.В.|
Специальная функция puts() позволяет вывести содержимое строки и переводит курсор на следующую строку. Например:
putchar(‘|’); puts(fam); putchar(‘|’);
приведет к получению следующего результата:
|Андреева С.В.
|
Последний символ будет выводиться в следующей строке экрана.
Обработка строковых данных
К любому символу строки можно обратиться как к элементу одномерногомассива, например, запись st[i] определяет i-ый символ в строке st. Поэтому при решении некоторых задач обработку строковых данных можно проводить посимвольно, организуя циклы для просмотра строки.
Например: Дано предложение. Определите количество слов в нем.
Решение:
Слова в предложении разделяются пробелами. Подсчитав количество пробелов, можно определить количество слов, учитывая, что между словами введен только один пробел.
#include "stdafx.h"
#include<string.h>
int main()
{ char slova[120];
int i, n, k=1;
printf("Введите предложение\n");
gets(slova);
n= strlen(slova); // функция strlen() возвращает длину строки
for(i=0;i<n; i++)
if(slova[i]==' ')k++; //поиск и подсчет пробела
printf("k=%d\n",k);
return 0;
}