Функции cin.Get(), cin.Getline().
//arb2015_get_getline
#include <iostream>
using namespace std;
void main()
{
const int n=30;
char S[n];
cout<<" new line ch= "<<(int)'\n'<<endl;//10
cout<<" 0-symbol ch= "<<(int)'\0'<<endl;//0
cout<< "enter S1="<< endl;
cin.getline(S,n); //Ввод строки Kazan State University
cout<<" S1="<<S<<endl; //Вывод Kazan State University
char V[]="abc";
cout<<"V= "<<V<<endl;// печатает abc
cout<<V[0]<<V[1]<<V[2]<<(int)V[3]<<endl;
// печатает abc0
}
Метод getline считывает из входного потока n-1 символов
или менее ( если символ перевода строки встретится раньше) и записывает их в строковую переменную S. Символ перевода строки тоже считывается (удаляется) из входного потока, но не записывается в строковую переменную, вместо него размещается
завершающий 0.
Если в строке исходных данных более n-1 символов, следующий ввод будет выполняться из той же строки , начиная с первого несчитанного символа
//arb2015_cinget_get
#include <iostream>
using namespace std;
void main()
{
const int n=30;
char S[n];
cout<<"enter string s= ";
cin.get(S,n);
cout<<" S= "<<S<<endl;
cin.get();
cout<<"enter string s= ";
cin.get(S,n);
cout<<" S= "<<S<<endl;
}
cout << "enter S2=" << endl;
Никогда не обращайтесь к разновидности метода get с двумя аргументами два раза подряд, не удалив \n из входного потока
/После каждого использования cin.get(S,n)
необходимо очищать входной поток от символа начало новой строки, который не снимается функцией cin.get(S,n) при считывании этого символа на экране появляется пустая строка
Во входном потоке остается \n символ новой строки; для того чтобы , снять с потока символ новой строки,
необходимо применить функцию cin.get() без формальных
параметров
Обработка символьной информации.
Задача 1
Задана символьная строка, содержащая
Фамилию , имя и отчество.
Создать три символьные строки , содержащие
Отдельно фамилию, имя и отчество.
//arb2015_fio_srring
#include <iostream>
#include<string.h>
using namespace std;
const int n=80;
void main()
{
char a[n],b[n],c[n],d[n];
cout<<" enter fio=";
cin.getline(a,n);
cout<<"a="<<a<<endl;
int i,j;
for( i=0;a[i]!=' ';i++)
b[i]=a[i];
b[i]='\0';
i++; j=0;
while(a[i]!=' ')
{
c[j]=a[i];
i++;
j++;
}
c[j]='\0';
i++;
j=0;
while(a[i]!='\0')
{
d[j]=a[i];
i++; j++;
}
d[j]='\0';
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
cout<<"d="<<d<<endl;
}
Задача 2
Вывод введенной строки символов в обратном порядке.
Ввод строки в массив.
//arb2014_gusen_8_1
#include <iostream>
using namespace std;
void main()
{
char str[20];
int i,n;
cout << "Enter string:";
cin >> str; // Можно ввести не более 19 символов.
// Подсчет количества символов в строке.
// Символ ‘\0’ – признак конца строки.
for(n=0; str[n]!='\0'; n++);
for(i=n-1; i>=0 ;i--)
cout << str[i]; // Посимвольный вывод строки.
cout << endl;
}
Задача 3
Вывод введенной строки символов в обратном порядке.
Ввод строки в массив.
Второй вариант программы с использованием библиотеки
работы со строками символов – string.
//arb2014_gusen_8_2
#include <iostream>
#include <cstring>
using namespace std;
void main()
{
char str[20];
int i,n;
cout << "Enter string:";
cin >> str; // Можно ввести не более 19 символов.
// Подсчет количества символов в строке.
n = strlen(str);
for(i=n-1; i>=0 ;i--)
cout << str[i]; // Посимвольный вывод строки.
cout << endl;
}
Задача 4
Исключить из строки все символы, не являющиеся
Буквами. Ввод строки в массив.
//arb2014_gusen_8_3
#include <iostream>
#include <cstring>
using namespace std;
void main()
{
const m=30;
char str[m];
int n;
bool fl=true;
cout << "Enter string :";
cin >> str; ; // Можно ввести не более 29 символов.
for (int i=0; str[i] != '\0'; i++)
if ( str[i]>='a' && str[i]<= 'z' || str[i]>='A' && str[i]<= 'Z')
cout << str[i];
cout << endl;
}
Задача 5
Определить, является ли введенное слово полиндромом.
Ввод строки в массив.
//arb2014_gusen_8_4
#include <iostream>
using namespace std;
void main()
{
const m = 20;
char str[m];
int i,n;
bool fl = true;
cout << "Enter string:";
cin >> str; // Можно ввести не более 19 символов.
// Подсчет количества символов в строке.
// Символ ‘\0’ – признак конца строки.
for(n=0; str[n]!='\0'; n++);
for(i=0; i<n/2 && fl ;i++)
if (str[i] != str[n-i-1])
fl = false;
cout << (fl ? "Polindrom" : "Non polindrom")<<endl;;
}
Задача 6