89787

Работа со строками в С++

Лекция

Информатика, кибернетика и программирование

Для работы со строками в С++ можно использовать объекты класса string и функции по работе ними (подключите библиотеку string.h) или воспользоваться стандартным типом char.

Русский

2015-05-13

63.73 KB

7 чел.

Работа со строками в С++

Для работы со строками в С++ можно использовать объекты класса string и функции по работе ними (подключите библиотеку string.h) или воспользоваться стандартным типом char.

Класс string

string a;//описание строки а

   cin >>a; //ввод слова до пробела

   int i, l=a.size();//размер строки

cout<<"длина строки: "<<a<<"\n равна "<<l<< " или "<<a.length()<<endl;

//вывод всех символов строки

for (i=0;i<l;i++) cout<<a[i]<<endl;

Ввод строки с пробелом, используя string

//ввод и вывод всей строки вместе с пробелами до нажатия Enter

string line;

getline (cin, line);

cout << line << endl;

//внимание! перевод строки не считывается.

Ввод строки с пробелом, используя char

char c[100]; int i=0;

cin>>noskipws;//отключаем пропуск пробелов

do{

   std::cin>>c[i];

}while(c[i++]!=10); // ввод до нажатия клавиши Enter

/* }while(c[i++]!=‘.’); // ввод до точки */

c[i]='\0';

cout<<i-1<<'\n';//количество символов в строке

cout<<c;

//восстановить настройки «пропуск пробелов»

cin>>skipws;

cin>>c;//обычный ввод строки

cout<<c;//и вывод строки

Посимвольный ввод/вывод, используя потоковый ввод/вывод

int d;

while((d=cin.get())!=EOF) //подключите stdio.h для EOF

//до символа конца файла (ctrl+Z, Enter)

   cout.put(d);

int b;

while((b=cin.get())!=10)

//до символа конца строки

   cout.put(b);

Ввод только чисел, используя string

#include <sstream>

string mystr; float price=0; int quantity=0;

cout << "Enter price: "; getline (cin,mystr);

stringstream(mystr) >> price;

cout << "Enter quantity: "; getline (cin,mystr);

stringstream(mystr) >> quantity;

cout << "Total price: " << price*quantity << endl;

Перевод из строки в число, используя char и stdlib.h

char * szString = new char[17];  int i; szString = “0123456789";

i = atoi(szString);//alfa to integer

cout<<i<<‘\n’; delete szString;

char a[10]="12.34“; float f;

f=atof(a);//alfa to float

cout<<'\n'<<f;

long int k; k=atol(a);

cout<<'\n'<<k;

Перевод из строки в число, используя string и sstream.h

template <typename T> string toString(T val)

   {  ostringstream oss;

       oss<<val;  return oss.str(); }

string str;

int i;     cin>>i;  str = toString(i); cout<<str;

float f;   cin >>f; str = toString(f);cout<<str;

ostringstream oss; oss<<i; s=oss.str();

Перевод из числа в строку, используя char и stdlib.h

char * szString = new char[17];

int i = 1234567890;

itoa(i,szString,10);  //int to alfa

cout<<szString;

delete szString;

char a[10]; long int k;

cin>>i>>k;

itoa(i*10,a,10); cout<<'\n'<<a;

ltoa(k/4,a,10); cout<<'\n'<<a;

//перевод из float в char функции нет!

Перевод чисел в строку, используя string и sstream.h

template <typename T> string toString(T val)

   {  ostringstream oss;

       oss<<val;  return oss.str(); }

string str;

int i;     cin>>i;  str = toString(i); cout<<str;

float f;   cin >>f; str = toString(f);cout<<str;

ostringstream oss; oss<<i; s=oss.str();

Ввод времени и даты, используя char

char c; int mm, hh, ss, d, m, y;

cout<<“введите время по формату час:мин:сек -> ”;

cin >>hh>>c>>mm>>c>>ss;

cout<<hh<<‘-’<<mm<<‘-’<<ss<<endl;

cout<<“введите дату по формату день/месяц/год:”;

cin >>d>>c>>m>>c>>y;

cout<<d<<‘-’<<m<<‘-’<<y<<endl;

Вставка подстроки

//вставка подстроки с позиции 0

string a=“variable”;    

  a.insert(0,"const");

   cout<<a<<endl;

Слияние строк

//конкатенация (слияние) двух строк

   string a, b("moroz");

   a="oy, "+b+", "+b+"!";

   cout<<a<<endl;

Замена подстроки

//замена 2 символа на подстроку, начиная с 0 позиции

string a=“marka”;     

a.replace(0,2,"oh");

   cout<<a<<endl;

Копирование подстроки

//выделение подстроки из строки а, 

//начиная с 4 символа длиной 5

string a=“informatika”;    

cout<<a.substr(4,5)<<endl;

Удаление символа "o"

string a=“moloko”;    

int n;

   while((n=a.find("o"))!=-1){

     a.erase(n,1);

     cout<<n<<a<<endl;

   }

Обмен строк

string a=“mama, b=“papa”;

a.swap(b);

   cout<<"a="<<a<<endl;

   cout<<"b="<<b<<endl;

Образование новой строки

string a, s=“”;//пустая строка

cin >>a;

for (int i=0;i<a.size(); i++)

{

 if (a[i]<=‘9and a[i]>=‘0’) s=s+a[i];

}

s=s+’\0’;//добавим конец строки

cout<<s;//вывод только цифр

Вывод строк в файл 

#include <fstream.h>

string lines;

ofstream myfile ("example.txt");

if (myfile.is_open()) {

myfile << "This is a line.\n";

myfile << "This is another line.\n";

myfile.close(); }

else 

cout << "Unable to open file";

Ввод строк из файла 

#include <fstream.h>

ifstream myfile ("example.txt");

if (myfile.is_open()) {

while ( myfile.good() ) {

getline (myfile,lines);

cout << lines << endl; }

myfile.close(); }

else

cout << "Unable to open file";


 

А также другие работы, которые могут Вас заинтересовать

24841. Сети отделов 27.32 KB
  Главной целью сети отдела является разделение локальных ресурсов таких как приложения данные лазерные принтеры и модемы. Обычно сети отделов имеют один или два файловых сервера и не более тридцати пользователей рис. Сети отделов обычно не разделяются на подсети.
24842. Сети кампусов 58.51 KB
  Сети этого типа объединяют множество сетей различных отделов одного предприятия в пределах отдельного здания или в пределах одной территории покрывающей площадь в несколько квадратных километров. Службы такой сети включают взаимодействие между сетями отделов доступ к общим базам данных предприятия доступ к общим факссерверам высокоскоростным модемам и высокоскоростным принтерам. Пример сети кампуса Именно на уровне сети кампуса возникают проблемы интеграции неоднородного аппаратного и программного обеспечения.
24843. Корпоративные сети 65.42 KB
  Сети масштаба предприятия корпоративные сети объединяют большое количество компьютеров на всех территориях отдельного предприятия. Для соединения удаленных локальных сетей и отдельных компьютеров в корпоративной сети применяются разнообразные телекоммуникационные средства в том числе телефонные каналы радиоканалы спутниковая связь. Пример корпоративной сети Непременным атрибутом такой сложной и крупномасштабной сети является высокая степень гетерогенности нельзя удовлетворить потребности тысяч пользователей с помощью однотипных...
24844. Вычислительная сеть 18.62 KB
  Качество доступа к ресурсу как глобальная характеристика функционирования сети может быть описана многими показателями выбор которых зависит от задач стоящих перед вычислительной сетью. Производительность вычислительной сети может быть оценена с разных позиций. С точки зрения пользователя важным числовым показателем производительности сети является время реакции системы особенно в той части которая относится к работе сети.
24845. Стандартные стеки коммуникационных протоколов 21.42 KB
  Три основных момента: Существует множество протоколов и хотя все они участвуют в реализации связи каждый протокол имеет различные цели выполняет различные задачи обладает своими преимуществами и ограничениями. Несколько протоколов могут работать совместно. В этом случае они образуют так называемый стек или набор протоколов Работа различных протоколов должна быть скоординирована так чтобы исключить конфликты или незаконченные операции.
24846. К локальным сетям - Local Area Networks (LAN) 13.54 KB
  Изза коротких расстояний в локальных сетях имеется возможность использования относительно дорогих высококачественных линий связи которые позволяют применяя простые методы передачи данных достигать высоких скоростей обмена данными порядка 100 Мбит с. В связи с этим услуги предоставляемые локальными сетями отличаются широким разнообразием и обычно предусматривают реализацию в режиме online.
24847. Глобальные сети - Wide Area Networks (WAN) 13.78 KB
  Так как прокладка высококачественных линий связи на большие расстояния обходится очень дорого в глобальных сетях часто используются уже существующие линии связи изначально предназначенные совсем для других целей. Изза низких скоростей таких линий связи в глобальных сетях десятки килобит в секунду набор предоставляемых услуг обычно ограничивается передачей файлов преимущественно не в оперативном а в фоновом режиме с использованием электронной почты. Для устойчивой передачи дискретных данных по некачественным линиям связи применяются...
24848. Оценка стоимости облигационного займа 27 KB
  Стоимость облигационного займа приблизительно равна доходу который получает держатель облигаций. Проценты по облигационным займам выплачиваются из чистой прибыли поэтому корректировка стоимости облигационного займа на налог на прибыль не производится.
24849. Повышение рыночной стоимости 31.5 KB
  Управление стоимостью компании – это современная стратегия менеджмента ориентированная на повышение инвестиционной привлекательности конкурентных преимуществ и устойчивой работы в рыночной среде в расчете на длительную перспективу. Отмечено что повышение рыночной стоимости компании является стратегической целью управления. Фактор создания стоимости представляется как некоторый элемент социальноэкономической системы влияющий на количественные и качественные параметры компании от которых зависит ее рыночная цена а управление стоимостью ...