HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Главная » Статьи » c++ |
Пример 1.Задача. Дана строка символов, подсчитать сколько раз среди символов строки встречается буква x. Разбор задачи. Сначала необходимо запросить у пользователя строку, ввести ее с клавиатуры. Затем в цикле, начиная с первого символа, проверять равен ли текущий символ символу х, если да, символы равны, увеличить специальную переменную-счетчик на 1, иначе перейти к анализу следующего символа и так до конца строки. В конце вывести результат (значение переменной-счетчика) на экран. Замечание: не забудьте обнулить значение счетчика перед использованием. #include <iostream.h> void main( void ) { char str[100]; // объявление строки символов // просим пользователя ввести строку символов cout << "\nInput a string: "; cin >> str; // считываем строку, введенную пользователем int count = 0; /* объявление переменной-счетчика, в которой будем хранить количество вхождений х в строку */ // в цикле сравниваем каждый символ строки с х-ом, // в случае совпадения увеличиваем переменную-счетчик на 1. int i = 0; while(str[i] != '\0') { if (str[i] == 'x') count++; i++; } // выводим результат на экран cout << "\n Number of x is " << count; } Пример2Задача. Написать программу, которая получает от пользователя набор символов, исключая пробел, и удаляет из этого набора все вхождения символов S и s. Разбор задачи. Из условия задачи можно сделать следующие выводы: мы должны написать программу, которая при получении конкретного набора символов должна произвести проверку этого набора на наличие символов S и s. Если символ S(или s) встретится в наборе, то необходимо его удалить из этого набора. Конечный результат не должен содержать ни одного символа S и s. Решение задачи будет состоять из трех блоков:
Пускай дана следующая строка: A b s D e f 0 1 2 3 4 5 ------ индексы Проверяя поиндексно каждый элемент массива, находим, что 2 элемент массива и есть искомый символ. Тогда, нам нужно сместить каждый элемент массива на 1 индекс меньше, т.е. мы получим следующий результат: A b D e f 0 1 2 3 4и тем самым добьемся решения задачи. Реализация сказанного приведена ниже на С++. #include <iostream.h> void main() { const int CharCount=10; //зададим размерность массива через константу char arr[CharCount]; //объявление символьного массива //Предупредим пользователя, что ввод ограничен размерностью массива cout << "\nDo enter any string but no more then " << CharCount-1 << " symbols\n"; cin >> arr; // ввод строки int i=0; while (arr[i]!='\0') /* Цикл работает пока не встретится признак конца строки */ if (arr[i]=='S'||arr[i]=='s') //Проверка на искомый символ { /*Если это искомый символ, то перенесем оставшуюся часть строки на один элемент левее...*/ for (int j=i;arr[j]!='\0';j++) arr[j]=arr[j+1]; } else i++; /*..., а если это не искомый символ, то будем двигаться по нашему массиву дальше */ cout << endl << arr << endl; /* опять таки, помним, что нужно вывести результат */ } Замечание к задаче. Как Вы думаете, что произойдет, если в программу ввести строку содержащую пробелы (т.е. нарушить условия задачи)? Как Вы можете объяснить полученное? Пример 3Задача. Написать программу сравнения двух строк. Разбор задачи. Чтобы понять, что означает одна строка "больше" или "меньше", чем другая строка, рассмотрим процесс расстановки имен по алфавиту. Вы, без сомнения, поставили бы "Jones" перед "Smith", потому что в алфавите J раньше S. Но как компьютер узнает о порядке следования букв? Помните? - все символы представляются внутри компьютера как численные коды; когда компьютер сравнивает две строки, он на самом деле сравнивает численные коды символов в строке. (Замечание: коды символов упорядочены по алфавиту только для латинских букв, к кириллице это, к сожалению, не относится) Перед тем как перейти непосредственно к программе, сделаем еще одно примечание. В некоторых случаях желательно вводить в массив полную строку текста. С этой целью C++ снабжен функцией cin.getline. Функция cin.getline требует три аргумента - массив символов, в котором должна храниться строка текста, длина и символ ограничитель. Например, фрагмент программы char sentence[80]; cin.getline(sentence, 80, '\n');объявляет массив sentence из 80 символов, затем считывает строку текста с клавиатуры в этот массив. Функция прекращает считывание символов в случаях, если встречается символ-ограничитель '\n', если вводится указатель конца файла или если количество считанных символов оказывается на один меньше, чем указано во втором аргументе (последний символ в массиве резервируется для завершающего нулевого символа). Если встречается символ ограничитель, он считывается и отбрасывается. Третий аргумент cin.getline имеет '\n' в качестве значения по умолчанию, так что предыдущий вызов функции мог быть написан в следующем виде: cin.getline(sentence, 80); #include<iostream.h> #include<string.h> void main() { int len; // длина вводимой строки char s[81]; // место хранения вводимой строки char *s1,*s2; cout << "Input the first string: "; cin.getline(s, 80); // ввод первой строки len = strlen(s); // определение длины строки s1 = new char[ len + 1]; // динамическое выделение памяти под строку s1 strcpy(s1, s); // копирование введенной строки в строку s1 cout << "Input the second string: "; cin.getline(s, 80); // ввод второй строки len = strlen(s); s2 = new char[len + 1]; // динамическое выделение памяти под строку s2 strcpy(s2, s); // какая из введенных строк больше? if(strcmp(s1, s2) > 0) cout << "String s1:\t" << s1 << "\n\t > \n" << "String s2:\t" << s2 << endl; else if(strcmp(s1, s2) == 0) cout << "String s1:\t" << s1 << "\n\t=\n" << "String s2:\t" << s2 << endl; else cout << "String s1:\t" << s1 << "\n\t < \n" << "String s2:\t" << s2 << endl; // удаление строк из памяти delete []s1; delete []s2; } | |
Просмотров: 19616 | Комментарии: 2 | Рейтинг: 5.0/1 |