Рассмотрим несколько примеров на использование функций, предназначенных для работы со строковыми переменными:
Задача: В режиме диалога с ЭВМ вводится текст длиной не более 80 символов. Необходимо подсчитать сколько раз в этом тексте встречается символ b, также введенный в режиме диалога.
Исходный код программы:
#include <iostream.h>
#include <stdlib.h>
typedef char stringa[81];
stringa a;
char b;
int i,n;
int main()
{
cout<<"VVEDITE TEKCT \n";
cin.getline(a,81);
cout <<"VVEDITE SIMVOL \n";
cin>>b;
cout <<"TEKCT:"<<endl;
cout<<a<<endl;
for (i=0; i<=strlen(a); i++)
if (a[i]==b) n++;
cout<<" SIMVOL "<<b<<" VSTRECHAETSYA "<<n<<" RAZ"<<endl;
system("PAUSE");
return 0;
}
Работа программы:
VVEDITE TEKCT
Солнышко светит, птички поют
VVEDITE SIMVOL
и
TEKCT:
Солнышко светит, птички поют
SIMVOL и VSTRECHAETSYA 3 RAZ
Для продолжения нажмите любую клавишу...
Задача: В режиме диалога с ЭВМ вводится текст (не более 20 слов). Выделить все слова в отдельный массив и напечатать его.
Исходный код программы:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
|
|
typedef char stringa[101];
stringa s,s1;
stringa a[20];
int i,j,k,n;
int main()
{
cout<<"BBEDITE TEKCT HE BOLEE 20 CLOV"<<endl;
cin.getline(s,101);
j=0;k=0;n=0;
strcpy(s1," ");
for (i=0;i<strlen(s);i++)
{
if (s[i]!=' ')
{s1[k]=s[i];k++;}
else
if (strcmp(s1," ")!=0)
{
s1[k]='\0';
strcpy(a[j],s1);
strcpy(s1," ");
j++;
k=0;
}
}
if (strcmp(s1," ")!=0)
{
s1[k]='\0';
strcpy(a[j],s1);
strcpy(s1," ");
j++;
k=0;
}
cout<<"B TEKCTE "<<j<<" CLOV"<<endl;
for (i=0;i<j;i++)
cout<<i+1<<" CLOVO = "<<a[i]<<endl;
system("PAUSE");
return 0;
}
Работа программы:
BBEDITE TEKCT HE BOLEE 20 CLOV
Если что-нибудь случилось, и никто не виноват, не ходи туда, иначе виноватым будешь ты.
B TEKCTE 14 CLOV
1 CLOVO = Если
2 CLOVO = что-нибудь
3 CLOVO = случилось,
4 CLOVO = и
5 CLOVO = никто
6 CLOVO = не
7 CLOVO = виноват,
8 CLOVO = не
9 CLOVO = ходи
10 CLOVO = туда,
11 CLOVO = иначе
12 CLOVO = виноватым
13 CLOVO = будешь
14 CLOVO = ты.
Для продолжения нажмите любую клавишу...
В этой программе фрагмент
if (strcmp(s1," ")!=0)
{
s1[k]='\0';
strcpy(a[j],s1);
strcpy(s1," ");
j++;
k=0;
}
используется дважды. Так как выделения слова настроено на появления символа пробел, а в конце текста пробела может не быть, то необходимо проверить, равна ли пробелу строковая переменная s1 (в ней формируется очередное слово). Если строковая переменная s1 не равна пробелу, то в массив добавляется последнее слово. Пробел можно добавлять «искусственно» после ввода текста, тогда эту проверку можно не использовать.
ЗАДАНИЕ: написать программу согласно своему варианту
Вариант | Задание |
1. | Дана строка. Найти наибольшее количество цифр, идущих в ней подряд. |
2. | Дана строка. Найти наибольшее количество букв, идущих в ней подряд. |
3. | Дана строка. Если в ней нет больших букв, то оставить ее без изменения, иначе каждый из символов, следующий за первой большой буквой, заменить «*», а последний знаком «?» |
4. | Дана строка. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, называются словами. Определить, какое слово имеет минимальную длину, а какое максимальную. |
5. | Найти число таких групп слов, которые начинаются и заканчиваются одной и той же буквой. |
6. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Объединить обе строки и поменять местами второе и третье слова. |
7. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Скопировать семь символов второй строки в первую. Получить из измененной первой строки новую, в которой не будет последнего и предпоследнего слов. |
8. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать третье слово второй строки к первой. Поменять порядок следования символов первой строки на противоположный. |
9. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить первое вхождение символа “м” в строке и вывести строку, начиная с этой позиции и до конца. Если такого символа в строке нет, то удалить второе слово и вывести получившуюся строку. |
10. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке. Если такого символа нет, то вывести всю строку, исключив из нее последнее слово. |
11. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Если последнее слово больше предпоследнего, то заменить первые три символа буквой “а”, в противном случае все символы заменить на “*”. |
12. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Если второе слово первой строки такое же, как второе слово второй строки, то поменять порядок следования символов первой строки на противоположный, в противном случае заменить все символы второй строки на “!” |
13. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки, который первым совпал с одним из символов второй. Вывести первую строку, исключив из нее слово, в которое входит этот символ. Вторая строка пробелами не разделена. |
14. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки, который первым не совпал с одним из символов второй строки. Вывести слово, в которое входит этот символ. |
15. | Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к первой. Поменять местами в измененной первой строке первое и последнее слово. |
|
|