Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 прописных латинских букв; между соседними словами - запятая, за последним словом - точка. Напечатать:эту же последовательность слов, но в обратном порядке. Написать с помощью указателей или адресной арифметики(какой легче будет)Вод код,но если написать запятые он не работает,еще он без указателей int main() { char str[] = { "car drive mouse." }; int length = strlen(str); int i; for (i = length - 1; i >= 0; i--) { if (str[i] == ' ') { str[i] = '\0'; printf("%s ", &(str[i]) + 1); } } printf("%s", str); return 0; } Код int main() { char str[] = { "car drive mouse." }; int length = strlen(str); int i; for (i = length - 1; i >= 0; i--) { if (str[i] == ' ') { str[i] = '\0'; printf("%s ", &(str[i]) + 1); } } printf("%s", str); return 0; }
Вот ссылка на код, там его можно полностью скопировать: https://onlinegdb.com/iH6vW7pDJ #include iostream #include cstring /*Так как otvet.mail.ru не дает возможности написать угловые скобки, нужно в предложении выше дописать угловые скобки для слова iostream и cstring*/ using std::cout; using std::endl; int main() { char str[] = { "car, drive, mouse." } ; int length = strlen(str); //Создаем указатель ptr и присваиваем ему адрес последнего символа строки: нуль-терминатора. char* ptr = str + length; for (int count = 0; count <=length; ++count) { //Дальше адресная арифметика. Вычитаем из адреса последнего символа такое количество count, которое при разности даст адрес символа запятой. //Когда такой адрес найдется, с него начнется вывод символов. Этим же адресом мы для удобства инициализируем новый указатель ptrCheck. //При каждой итерации, разность последнего адреса с счетиком count увеличивается на единицу. Вычитание происходит с символа нуль-терминатора. char* ptrCheck = ptr - count;// = ptr - count; if (*ptrCheck == ','||count==length) { //Указателю ptrCheck мы присваиваем адрес, значением которого является первая встречная запятая в строке str. //Чего нужно добиться: //Начать выводить символы с этого адреса, до тех пор, пока не встретится символ запятой или точки. ptrCheck = (ptr - count); // for (int count_1 = 0; ptrCheck[count_1] != '\0', ptrCheck[count_1] != '.'; ++count_1) { //Здесь дополнительно нужно написать, что если после текущего символа будет стоять запятая, то прежде чем выходить из цикла //текущий символ нужно допечатать. Это необходимо, потому что изначально наш счетчик count_1 начинается с символа запятой. И если //бы условием было задано «оканчивать цикл, если текущий элемент равен ','», то наша программа не выводила бы символы, стоящие после запятой.. if (ptrCheck[count_1+1] == ',') { cout << ptrCheck[count_1]; break; } else { if (ptrCheck[count_1] == ',' || ptrCheck[count_1] == ' ') ; else cout << ptrCheck[count_1]; } } //После каждого вывода слова, выполняется следующая часть кода, которая выводит запятую или точку. // Когда значение count достигает конца, то при разности с длиной length это в результате дает 0: самый начальный элемент. // То есть когда значение длины length и count одинаково, то это дает в результате их разности 0 или нулевой элемент. if (count == length) cout << "." << endl; else cout << ", "; } } }