Перевернуть каждое слово строки - C (СИ)

  1. В записке слова зашифрованы — каждое из них записано наоборот. Расшифровать сообщение


textual

Код к задаче: «Перевернуть каждое слово строки - C (СИ)»

#include <stdio.h>
#include <ctype.h>
#define is_delim(c) (isspace((c)) || ispunct((c)))
 
char* words_rev(char* s){
    char* _f, *_l, c, *t = s;
    int n = 0;
    do {
        if(!is_delim(*s) && *s)
            ++n;
        else if(n > 0){
            for(_f = s - n, _l = s - 1; _f < _l; ++_f, --_l){
                c   = *_f;
                *_f = *_l;
                *_l = c;
            }           
            n = 0;
        }
    } while(*s++ != '\0');
    return t;
}
 
int main(void){
    char s[] = "LPA, AVAJ, LREP, PSIL, HTROF.";
    puts(s);
    puts(words_rev(s));
    getchar();
    return 0;
}

СДЕЛАЙТЕ РЕПОСТ

14   голосов, оценка 4.071 из 5



Похожие ответы
  1. Дан массив размерности n. Заполнить массив случайными числами в диапазоне [-100;100]. Перевернуть массив: a[n-1]↔a[0], a[n-2]↔a[1] и т.д. Для работы с массивом использовать функцию. пример программыC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 // Обнулить в массиве отрицательные элементы #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; void func(int *a, int n) {     for (int i = 0; i < n; i++)         if (a[i] < 0) a[i] = 0; } int main() {     int *a;     int n;     srand(time(NULL));     printf("n= ");     scanf("%d", &n);     a = (int*)malloc(n*sizeof(int));     for (int i = 0; i

  1. В общем, нужно сделать с использованием функций Я явно где-то накосячил, потому что выводит только 0 Помогите пожалуйстаC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 /*Найти минимальное из чисел, каждое из которых является произведением всех элементов матриц А, В и D, соответственно.*/ #include #include #include #include int vvod(int**mass, int n,int m); int pr(int**mass, int n, int m); int vyvod(int**mass, int n,int m);   int main() {     int i,j,P,n,m;     int a,b;//первый     int c,d;//второй     int f,g;//третий     puts("Vvedyte kolichestvo strok massiva");     scanf("%d",&a);     puts("Vvedyte kolichestvo stolbcov massiva");     scanf("%d",&b);     int **A[a][b];     vvod(**A,a,b);         puts("Vvedyte kolichestvo strok massiva");     scanf("%d",&c);     puts("Vvedyte kolichestvo stolbcov massiva");     scanf("%d",&d);     int **B[c][d];     vvod(**B,c,d);         puts("Vvedyte kolichestvo strok massiva");     scanf("%d",&f);     puts("Vvedyte kolichestvo stolbcov massiva");     scanf("%d",&g);     int **D[f][g];     vvod(**D,f,g);         //     vyvod(**A,a,b);     vyvod(**B,c,d);     vyvod(**D,f,g);            int p1,p2,p3;    p1=pr(**A,a,b);    p2=pr(**B,c,d);    p3=pr(**D,f,g);        printf("%d %d %d",p1,p2,p3);    // } int vvod(int**mass, int n,int m) {     int i,j;     mass= new int*[n];     for(i=0;i

  1. Я могу рекурсивно вывести массив:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include   void revR (int* array, int n) {     if (n == 0) return;     revR(array + 1, n - 1);     printf("%d", *array); }   int main(void) {     int arr[] = { 1, 2, 3, 4, 5 };     revR(arr, 5);     return 0; }А вот как перевернуть его в памяти - не соображу. Вот единственное, что пришло в голову, но хотелось бы решение в стиле функциональных языков, с откусыванием головы. А мое решение - по сути, замаскированный цикл. Я думал как-то выкрутиться через realloc'и, но запутался. К тому же функция желательно чтобы имела сигнатуру int* revR(int* array, int n)C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include   void revR(int* begin, int* end, int n) {     if (n > 1)     {         int t = *begin;         *begin = *end;         *end = t;         reverse(begin + 1, end - 1, n - 2);     } }   int main(void) {     int arr[] = { 1, 2, 3, 4, 5 };     reverse(arr, arr + 4, 5);     for (int i = 0; i < 5; i++) printf("%d ", arr[i]);     return 0; }

  1. Здравствуйте. Помогите исправить код, пожалуйста. Дополнить по возможности каждое слово в строке заданным символом.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include #define N 40 int main() {  int i;  char str[N];  clrscr();  printf("\n Vvedite predlojenie:\n");  gets(str);  for(i=N-1;i>=0;i--)  {     if(str[i]==' ')     str[i]='p';  }  printf("\n Vivod: \n");  puts(str);  getch();  return 0; }

  1. Словом назовём всякую последовательность букв латинского алфавита длинны не более 20. Предложение - всякую последовательность не более 30 слов, разделенных одним или несколькими пробелами, оканчивающуюся символом "." "!" "?". Написать программу, читающую заданное предложение, контролирующую его правильность и выполняющую функция, которая: Распечатывает каждое слово предложения, меняя его первую букву на прописную, если необходимо. Вот мой вариант кода:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #define _CRT_SECURE_NO_WARNINGS #include char up(void) {     int k = 0;     int i = 0;     char str[20];     while ((str[i] != '.') || (str[i] != '!') || (str[i] != '?') || (k > 30))     {         char str[20];         while (str[i] != ' ')         {             gets(str);         }         strupr(str[i]);         printf("%s", str);         k += 1;     } } void main() {     int i, k;     char str[20];     printf("Input ur string: ");     up();     }Программа позволяет ввести строку, однако, не обрабатывает её... Объясните, пожалуйста, в чём у меня ошибка?

  1. Помогите пожалуйста. Нужно перевернуть слово в предложении последние. Например "За окном хорошая погода", чтобы погода была "адогоп".

  1. Ребята буду очень благодарен ) нужно написать программу которая будет "переворачивать" слова в строке

  1. Всем привет! Помогите Подсчитать сколько раз появляется каждое ключевое слово языка С в символьном файле с программой на С.(под ключевым словом подразумевается for while do if).использовать функции fopen(), fclose(), fgets()

  1. /*Всем Доброго дня помогите переписать код из си++ в си (Отредактировать заданное предложение, удаляя из него все слова с нечетными номерами и переворачивая слова с четными номерами.)*/C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include #include #include #include   int main(int argc, char* argv[]) {     setlocale(LC_ALL, "Rus");     std::vector arr;     std::string str;     std::string word;     int i = 0;       std::cout << "Введите предложение.." << std::endl;     std::getline(std::cin, str);       std::stringstream  data(str);       while(std::getline(data,word,' '))     {         if(i++ % 2 == 0)         {             std::reverse(word.begin(), word.end());             arr.push_back(word);         }     }       for (std::vector::iterator iter = arr.begin(); iter < arr.end(); ++iter)         std::cout << *iter << std::endl;       return 0; }