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

Узнай цену своей работы

Формулировка задачи:

Добрый день. Помогите пожалуйста с заданием: Ввести символьную строку. Предпоследнее и последнее слова в строке поменять местами. Без указателей. Как можно проще. Пробовала так:
#include <stdio.h>
#include <conio.h>
#include <cstring>
 
int main()
{
    long i;
    char str[1024] = {0};
    printf("\tEnter input string\n");
    scanf("%[^\n]",str);
    long k;
    int a[2];
    k=strlen(str);
    int j=0;
    for(i = k; i != 0;i--){
        if(j<=1){
            if((str[i] == ' ' || str[i] == '\0') && str[i-1] != ' '){
                a[j]=i;
                j++;
            }
        }
    }    
    for (i=0; i<2;i++){
        printf("%d\n", a[i]);
    }
    printf("Press any key to continue\n");
    getch();
    return 0;
}

Решение задачи: «Предпоследнее и последнее слова в строке поменять местами»

textual
Листинг программы
#include <stdio.h>
char del[]="\t\n,.!?;: ";
int isdelim(char s)
{
    int i;
    for(i=0; del[i]; ++i)
    {
        if(del[i]==s)return 1;
    }
    return 0;
}
#define N 255
int main(void)
{
char s;
int i, konPrSl, konPosSl, nachPrSl, nachPosSl, c1, c2, j, razn, d, b;
    char str[N]="Lorem ipsum dolor sit amet, consectetur adipiscing";
    for(i = 0; str[i]; ++i);
    --i;
    if(i==-1){printf("Pustaya stroka!\n");return 0;}
    while(isdelim(str[i])){if(i==0){printf("Slova otsutstvuyut!\n");return 0;}--i;}
    konPosSl=i;
    while(!isdelim(str[i])){if(i==0){printf("Odno slovo!\n");return 0;}--i;}
    ++i;
    nachPosSl=i;
    --i;
    while(isdelim(str[i]))--i;
    konPrSl=i;
    while(!isdelim(str[i])){if(i==0){--i; break;}--i;}
    ++i;
    nachPrSl=i;
    c1=konPrSl-nachPrSl+1;
    c2=konPosSl-nachPosSl+1;
    if(c1==c2)
        {
            for(i=nachPrSl, j=nachPosSl; i<konPrSl+1; ++i, ++j)
                {
                    s=str[i];
                    str[i]=str[j];
                    str[j]=s;
                    
                }
        }else
            if(c1<c2)
            {
                for(i=nachPrSl, j=nachPosSl; i<konPrSl+1; ++i, ++j)
                {
                    s=str[i];
                    str[i]=str[j];
                    str[j]=s;
                }
                razn=c2-c1;
                d=konPrSl+1;
                
                for(i=0;i<razn; ++i)
                {
                    b=konPosSl;
                    s=str[konPosSl];
                    
                    for(; b!=d; --b)
                    {
                        str[b]=str[b-1];
                    }
                    str[d]=s;
                }
            }else
                {
                    for(i=konPosSl, j=konPrSl; i>nachPosSl-1; --i, --j)
                    {
                        s=str[i];
                        str[i]=str[j];
                        str[j]=s;
                    }
                    razn=c1-c2;
                    d=nachPosSl-1;
                    
                    for(i=0;i<razn; ++i)
                    {
                        b=nachPrSl;
                        s=str[nachPrSl];
                    
                        for(; b!=d; ++b)
                        {
                            str[b]=str[b+1];
                        }
                        str[d]=s;
                    }
                }
 
    for(i=0; str[i]; ++i)printf("%c", str[i]);
 
return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.333 из 5
Похожие ответы