Лабораторная № 3 Програмирование. Лаб3(2021). Лабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов
Скачать 222.5 Kb.
|
Пример программы ввода последовательности символов#include using namespace std; /* Вводится последовательность символов до нажатия клавиши "Enter". Текст является десятичной записью числа, кратного 9*/ int main() { setlocale(LC_ALL, "rus"); char c; long s; long s1=0; cout<<"Введите символы, конец ввода - Enter"; do { c=getchar();//считываем символ if (c>='0' && c<='9') { s=int(c)-48; s1=s1*10+s; } } while (c!='\n'); //цикл до нажатия Enter if (s1%9==0) cout<<" число делится на 9"< else cout << "число не делится на 9" << endl; return 0; } Пример программы поиска и замены символов в строке разными способами#include #include #include #include #include using namespace std; int main() { //для работы с русской кодировкой необходимы дополнительные команды. system("chcp 1251"); //или SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода // объявление переменных начало char strSource[200]; char strCharsAndPointer[200]; char strCharsAndLoop[200]; string strStringAndAlgorithm; string strStringAndLoop; //! параметризируем код, а не используем значения в коде напрямую char sourceSymbol = 'д'; char replaceSymbol ='т' ; // объявление переменных конец cout << "Введите строку " << endl; cin >> strSource; // установка значений внутреннего состояния программы для введенной пользователем строки strncpy_s(strCharsAndPointer, strSource, sizeof(strSource)); strncpy_s(strCharsAndLoop, strSource, sizeof(strSource)); strStringAndLoop = strSource; strStringAndAlgorithm = strSource; //работа со строкой как с массивом типа char int N=strlen(strCharsAndLoop); for (int i = 0; i < N; i++) { if (strCharsAndLoop[i] == sourceSymbol) { strCharsAndLoop[i] = replaceSymbol; } } //использование библиотечной функции поиска и указателя char* pointerToFoundChar; pointerToFoundChar = strchr(strCharsAndPointer, sourceSymbol); while (pointerToFoundChar != NULL) { *pointerToFoundChar = replaceSymbol; pointerToFoundChar = strchr(strCharsAndPointer, sourceSymbol); } //работа со строкой с использованием типа string for (int i = 0; i < strStringAndLoop.length(); i++) { if (strStringAndLoop[i] == sourceSymbol) { strStringAndLoop[i] = replaceSymbol; } } //работа со строкой и стандартной библиотекой алгоритмов обработки контейнеров и алгоритмов replace(strStringAndAlgorithm.begin(), strStringAndAlgorithm.end(), sourceSymbol, replaceSymbol); cout << "Результат c char и циклом:" << endl; cout << strCharsAndLoop << endl; cout << "Результат c char и указателем:" << endl; cout << strCharsAndPointer << endl; cout << "Результат cо string:" << endl; cout << strStringAndLoop << endl; cout << "Результат cо string и algorithm:" << endl; cout << strStringAndAlgorithm; } Пример отчёта для задания BЗадан текст, состоящий из слов, записанных через запятые, и заканчивающийся точкой. Длина текста не больше 200 символов. Необходимо выдать на экран слова и их длины. Если слово состоит только из цифр, то возвести его в куб. Выходная строка содержит нецифровые слова, в которых порядок символов изменен на обратный. Словесный алгоритм:Ввод строки x m=0 (число слов, номер слова) Выделение памяти для y. y=”” (очистка строки результата) Выделение памяти для rez (rez – промежуточное поле для получения букв слова в обратном порядке). adrz=strstr(x,",") (Запоминание в adrz адреса символа строки x, равного ‘,’) Если adrz=NULL (нет такого символа), то adrz=strstr(x,".") (Запоминание в adrz адреса символа строки x, равного ‘.’) strncpy(slovm,x,adrz-x) (Копирование в slovm части строки x до запятой или до точки) slov m,adrz-x='\0' (Помещение в конец slovm символа конца строки) lengm=adrz-x (Длина строки) Вывод m, slovm,lengm i = strspn (slovm,cif) (Запоминание в i количества символов slovm, совпадающих с символами строки cif - цифры) Если i=lengm, то 12.1.slovcif=результату преобразования slov из строки в число 12.2.Вывод slovcif3 иначе 12.3. Очистка поля rez 12.4. j=0 12.5. Для j 12.5.1. rezj=slovm,leng[m]-j-1 (изменение порядка символов) 12.5.2. j=j+1 12.6. strcat(y,rez) (присоединение к y перевернутого слова rez) 12.7. strcat(y,”,”) (присоединение к y запятой) m=m+1 strcpy(x,adrz+1) (Копирование в x части после запятой) Если строка x не пуста, то п. 5 Вывод y Тесты:
Программа: #include #include #include void main(){char x[200],*slov[20],*rez,*y; char cif[] = "1234567890"; int i,j,m,n,k,leng[20],slovcif,cub[20]; char *adrz; cout<<"Input x"< cin>>x; m=0;n=0;k=0;y=new char[200];strcpy(y,""); rez=new char[10]; do { adrz=strstr(x,","); if (adrz==NULL) adrz=strstr(x,"."); slov[m]=new char[m]; strncpy(slov[m],x,adrz-x); leng[m]=adrz-x; slov[m][leng[m]]='\0'; cout<<"Word number "< i = strspn (slov[m],cif); if (i==leng[m]){slovcif=atoi(slov[m]); cub[k]=slovcif*slovcif*slovcif; cout<<"Cube "< else{strcpy(rez,"");for (j=0;j m++; strcpy(x,adrz+1);} while(strcmp(x,"")!=0); cout< } |