Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Функции ввода символьной строки




char* gets(char *buffer); считывает символьную строку из стандартного входного потока и помещает ее по адресу, заданному указателем buffer. Прием строки заканчивается, если функция обнаружит символ ‘\n’ и данный символ заменяется на символ ‘\0’.

Возвращает указатель на считанную строку.

int scanf(const char * format, *buffer) считывает символьную строку из стандартного входного потока и помещает ее по адресу, заданному указателем buffer. Прием строки заканчивается, если функция обнаружит символ ‘\n’или” ” и данный символ заменяется на символ ‘\0’.

Возвращаемое значение – число считанных полей

Функции вывода символьной строки

int puts(const char *string); записывает символ в стандартный поток данных и символ ‘\0’заменяется на ’\n’.

Возвращает код переданного символа..

int printf(const char * format, ……); записывает символ в стандартный поток вывода символ ‘\0’ игнорируется.

Возвращаемое значение – число записанный в поток символ

Для просмотра введенных символов строки используется

Примеры:

  1. Ввести строку и распечатать каждый ее символ с новой строки

#include<stdio.h>

Void main()

{

char x[100];

Int i;

puts("Введите строку: ");

Gets(x);

for(i=0;x[i]!='\0';i++)

printf("%c\n",x[i]);

}

  1. Ввести строку определить, сколько символов содержит данная строка

#include<stdio.h>

Void main()

{

char x[100];

Int i;

puts("Введите строку: ");

Gets(x);

for(i=0;x[i]!='\0';i++);

printf("\n%s - содержит %d символов\n",x,i);

}

  1. Ввести строку и распечатать данную строку в обратном порядке.
  2. Ввести строку и переписать ее в обратном порядке в новую строку.
  3. Ввести строку заменить символ «а» на символ «!» в данной строке.
  4. Посчитать сколько раз в словах встречается буква «а» и поменять первый и последний символ
  5. Посчитать число слов
  6. Написать функцию присвоения строк. Прототип функции char* prisv(char*,char*); т.е. присвоить вторую строку первой и вернуть первую строку.
  7. Написать функцию добавления строк. Прототип функции char* dobav(char*,char*); т.е. добавить вторую строку первой и вернуть первую строку.
  8. Написать функцию, которая считает количество введенных символов. Прототип функции int* dlina(char*); получает строку и возвращает количество введенных символов
  9. Написать функцию, которая сравнивает строки и возвращает: 0 если строки равны; 1 если в первой строке встретился символ больше чем во второй строке и -1 в противном случае. Прототип функции int* srav(char*, char*);

#include<stdio.h>

int srav(char *,char *);

Void main()

{

char x[100],y[100];

Int l;

puts("Введите строку: ");

Gets(x);

puts("Введите строку: ");

Gets(y);

l=srav(x,y);

if(l==0)

printf("строки одинаковы==\n");

Else

printf("строки не одинаковы!=%d\n",l);

}

int srav(char *x,char *y)

{

for(int i=0;x[i] || y[i];i++)

{

if(x[i]>y[i])

Return 1;

if(x[i]<y[i])

Return -1;

}

return 0;}

5.2 Функции работы со строками из библиотеки <string.h>

char*strcpy(char*s1,const char*s2); копирует строку s2 в строку s1, причем массив строк s1 должен быть достаточно большим, чтобы хранить строку s2 и символ конец строки содержащий в копирующей строке. Возвращает значение строки s1.

char*strcnpy(char*s1,const char*s2, size_t n); копирует не более n символов строки s2 в строку s1, причем массив строк s1 должен быть достаточно большим, чтобы хранить строку s2 и символ конец строки содержащий в копирующей строке. Возвращает значение строки s1.

 

char*strcat(char*s1,const char*s2); добавляет строку s2 строке s1, причем массив строк s1 должен быть достаточно большим, чтобы хранить строки s1 и s2, а так же символ конец строки. Возвращает значение строки s1.

char*strncat(char*s1,const char*s2, size_t n); добавляет не более n символов строки s2 в строке s1, причем массив строк s1 должен быть достаточно большим, чтобы хранить строки s1 и s2, а так же символ конец строки. Возвращает значение строки s1.

int strcmp(const char*s1,const char*s2); сравнивает посимвольно строки s1 и s2, возвращает 0, если строки одинаковы, 1 если встречается хотя бы один символ в строке s1, код которого больше, чем код символа строки s2 и -1, если встречается хотя бы один символ в строке s1, код которого меньше, чем код символа строки s2.

int strcnmp(const char*s1,const char*s2,size_t n); сравнивает не более n символов строки s1 и s2, возвращает 0, если строки одинаковы, 1 если встречается хотя бы один символ в строке s1, код которого больше, чем код символа строки s2 и -1, если встречается хотя бы один символ в строке s1, код которого меньше, чем код символа строки s2.

size_t strlen(const char*s); определяет длину строки s и возвращает количество символов, предшествующих символу конец строки. sise_t – это целый без знака тип, который определен в <stddef.h>

char*strtok(char*s1,const char*s2); функция разбивает строку s1 на лексему (последовательность символов, отделенной символом разделителем, разделителем обычно служат пробелы или знаки пунктуации и задается как строка s2). Если последовательно вызывать strtok, можно разбить строку s1 на логические куски, разделенные символом, содержащим в строке s2. Первый вызов содержит в качестве первого аргумента строку s1, а последующие вызовы для обработки той же строки, содержит в качестве первого аргумента NULL. При каждом вызове возвращает указатель на текущую лексему.

#include<stdio.h>

#include<string.h>

Void main()

{

char x[]="afs,gaf, agshdfah, ash%%gdha, as%gda%";

char *ptr;

printf("разбитие строки на лексемы:\n");

ptr=strtok(x,",");

while(ptr!=NULL)

{

printf("%s\n",ptr);

ptr=strtok(NULL,",");

}

}

В результате работы данной программы получим:

разбитие строки на лексемы:

Afs

Gaf

Agshdfah

ash%%gdha

as%gda%

Задачи:

  1. Имеем 4 строки, например char x[20], y[20], z[20], t[80]; В первую строку вводим фамилию, во-вторую имя, а в третью отчество и используя функции из библиотеке <string.h> записываем в строку z сначала фамилию потом пробел, имя пробел и отчество пробел. Распечатываем только строку z.
  2. Введите строку. Если длина строки а) больше 10, то удалить два последних символа; б) меньше 10, то удалить два первых символа; в) равно 10, то удалить символ по середине.
  3. Ввести число и распечатать, те цифры данного числа, которые делятся на 2.
  4. Ввести число и посчитать произведение цифр данного числа.
  5. Ввести число и распечатать цифры данного числа через два пробела. Например, если ввели 123456, то печатает 1 2 3 4 5 6.
  6. Ввести строку, которая содержит целые числа и преобразовать ее в число.

#include<stdio.h>

Void main()

{

char m[100];

int n=0,i;

printf("Ввести строку: ");

scanf("%s",m);

for(i=0;m[i];i++)

{

n*=10; n+=m[i]-'0';

}

printf("\n%d\n",n);

}

  1. Ввести дату в строку следующим образом: 12/05/1956 и программа распечатывает строку следующим образом: 12 мая, 1956 года (использовать оператор switch).
  2. *Ввести число, например 3451 программа должна напечатать три тысячи четыреста пятьдесят один.
  3. Ввести число, посчитать, сумму цифр введенного числа используя char

#include<stdio.h>

Void main()

{

char s[50];

int x,i,sum=0;

printf("Введите число: ");

scanf("%s",s);

for(i=0;s[i]!='\0';i++)

{

if(s[i]=='-' && i==0)

Continue;

x=s[i]-'0';//преобразования символа в число

sum+=x;

}

printf("summa=%d\n",sum);

}

10. С помощью данной программы можно определить код символа.

#include<stdio.h>

Void main()

{

Int x;

Char ch;

x=getchar();

ch=(char)x;

printf("%c=%d\n",ch,x);

}

11. За один просмотр исходного текста определить, сколько раз встречается каждый символ

#include<stdio.h>

Void main()

{

char arr[256],text[500];

Int i,j;

for(i=0;i<256;i++)

arr[i]=0;//Обнуляем массив встречаемости символов

printf("\nВведите текст:\n");

Gets(text);

for(j=0;text[j];j++)

{

i=(unsigned char)text[j];//аналогично i=(int)text[j];

arr[i]++;

}

for(i=0;i<256;i++)

{

if(arr[i])

printf("\nСимвол '%c' встречается %d раз",i,arr[i]);// если в printf ‘%c’,то i выводится как //символ.

}

}

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

Москва столица России!!! 123 456, то получаем

Москва

столица

России!!!

Массив строк

 

char array[3][50]; объявляется двумерный массив array, состоящий из трех строк по 50 байт.

Примеры:

  1. Ввод и вывод массива строк.

#include<stdio.h>

Void main()

{

char string[5][20];

Int i;

for(i=0;i<5;i++)

{

printf("Строка %d\n",i+1);

gets(string[i]);

}

for(i=0;i<5;i++)

puts(string[i]);

}

  1. Ввести массив из пяти строк, рассортировать в алфавитном порядке

#include<stdio.h>

#include<string.h>

Void main()

{

char string[5][20],buf[20];

Int i,j,k;

for(i=0;i<5;i++)

{

printf("Строка %d\n",i+1);

gets(string[i]);

}

for(i=0;i<4;i++)

{

for(k=i,j=i+1;j<5;j++)

if(strcmp(string[k],string[j])>0)

k=j;

strcpy(buf,string[i]);

strcpy(string[i],string[k]);

strcpy(string[k],buf);

}

puts("");

for(i=0;i<5;i++)

puts(string[i]);

}

  1. Ввести массив строк, в который записываются целые числа, преобразовать их в массив чисел и вывести.

#include<stdio.h>

Void main()

{

char m[5][100],*s;

int n[5],i;

for(i=0;i<5;i++)

scanf("%s",m[i]);

for(i=0;i<5;i++)

{

for(s=m[i],n[i]=0;*s;s++)

{

n[i]*=10;

n[i]+=*s-'0';

}

}

puts("");

for(i=0;i<5;i++)

printf("%d\n",n[i]);}






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных