Предпоследнее и последнее слова в строке поменять местами - 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;
}