Module 8
Module 8
Строки
1
Строки
const char c=’c’; //символ – занимает один байт, его
значение не меняется
char a,b;//символьные переменные, занимают по одному
байту, значения меняются
const char *s=“Пример строки\n” ;//текстовая константа
Строка - массив символов, заканчивающийся нуль-
символом (символ с кодом, равным 0; записывается '\0‘).
“A” – строка (2байта), ‘A’ – символ (1байт)
Библиотеки - <string.h>
<cstring>
<string>
Ввод-вывод строк - <cstdio>
2
Инициализация строк
void main()
{
char s1[10]="string1";
int k=sizeof(s1);
cout<<s1<<"\t"<<k<<endl;
char s2[]="string2";
k=sizeof(s2);
cout<<s2<<"\t"<<k<<endl;
char s3[]={‘s’,’t’,’r’,’i’,’n’,’g’,’3’}
k=sizeof(s3);
cout<<s3<<"\t"<<k<<endl;
char *s4="string4";//указатель на строку, ее нельзя изменить
k=sizeof(s4);
cout<<s4<<"\t"<<k<<endl;
}
Результаты:
string1 10 – выделено 10 байтов, в том числе под \0
string2 8 – выделено 8 байтов (7+1байт под \0)
string3 8 – выделено 8 байтов (7+1байт под \0)
string4 4 – размер указателя
3
Занесение строк в память
char*ss; - описан указатель
ss=”String6”; // неправильно
//память не выделяется , поэтому программа может
// закончиться аварийно!!!
Правильно:
char *sss=new char[10];//выделяем динамическую
память
strcpy(sss,”String7”);//копируем строку в память
7
Функции преобразования и анализа строк
double atof(const char* p);
//преобразует переданную строку в double
int atoi(const char* p); //преобразует переданную строку в int
long atol(const char* p); //преобразует переданную строку в long
8
Пример 1. Запрос пароля не более 3 раз
#include <stdio.h>
#include <string.h>
int main(){
char s[5], passw[] = "kuku";
/* Можно - *passw = "kuku"; */
int i, ok = 0;
for (i = 0; !ok && i<3; i++){
printf("\nвведите пароль:\n");
gets(s);
if (strcmp(s,passw)==0 ) ok=1;
}
if (ok) printf("\nпароль принят");
else printf("\nпароль не принят");
}
9
Пример 2. Удалить из строки слов, разделенных
пробелами, слова, начинающиеся с цифры
#include <stdio.h>
#include <string.h>
void main()
{ char s[250], //исходная строка
w[25], //слово
mas[10][25];//массив слов
puts(“\nвведите строку”);
gets(s);
int k=0,t=0,i,len,j;
len=strlen(s);
while(t<len)
{
for(j=0,i=t;s[i]!=’ ‘;i++,j++)w[j]=s[i];//формируем слово до пробела
w[j]=’/0’;//формируем конец строки
strcpy(mas[k],w);//копируем слово в массив
k++;//увеличиваем счетчик слов
t=i+1;//переходим к следующему слову в исходной строке
}
strcpy(s,””);//очищаем исходную строку
for(t=0;t<k;t++)
if(mas[t][0]<’0’&&mas[t][0]>’9’)//если первый символ не цифра
{strcat(s,mas[t]);//копируем в строку слово
strcat(s,” “);//копируем в строку пробел
}
puts(s);//выводим результат
} 10
Пример 3. Работа с указателями на строки
char src[10], dest[10];
for (int i = 0; i <= strlen(src); i++)
dest[i] = src[i];
11
Пример 4. Передача строк в качестве
параметров функций
Функция поиска заданного символа в строке
int find(char *s,char c)
{
for (int I=0;I<strlen(s);I++)
if(s[I]==c) return I;
return –1
}
С помощью этой функции подсчитаем количество гласных
букв в строке.
void main()
{ char s[255];
gets(s)
char gl=”aouiey”;
for(int I=0,k=0;I<strlen(gl);I++)
if(find(s,gl[I])>0)k++;
printf(“%d”,k);
}
12