Не меняются местами слова в строке - C (СИ)
Формулировка задачи:
В задании требуется поменять местами первое и последние слова.
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(void)
{
char str[N], A[N], B[N];
int i, n, x, j;
gets (str);
x=0;
for (i=0 ; i<N ; i++)
if (str[i]==' ')
{
x++;
if (x==1)
for (n=i ; n>=0 ; n--)
A[n]=str[n];
}
x=0;
j=0;
for (i=N ; i>0 ; i--)
if (str[i]==' ')
{
x++;
if (x==1)
for (n=i+1 ; n<N ; n++)
{
B[j]=str[n];
j++;
}
}
for (i=0 ; i<N ; i++)
if (str[i]==' ')
{
x++;
if (x==1)
for (n=i ; n>=0 ; n--)
str[n]=B[n];
}
j=0;
for (i=N ; i>0 ; i--)
if (str[i]==' ')
{
x++;
if (x==1)
for (n=i ; n>=0 ; n--)
{
str[n]=A[j];
j++;
}
}
puts (A);
puts (B);
puts (str);
system("PAUSE");
return 0;
}Решение задачи: «Не меняются местами слова в строке»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
const int N = 100;
char str[N], first[N], mid[N], last[N];
int i = 0, len, first_len, last_len;
gets(str);
len = strlen(str);
for (i=0; i<len; i++)
if (str[i]==' ')
break;
strncpy(first, str, i);
first[i] = '\0';
first_len = strlen(first);
for (i = len-1; i>=0; i--)
if (str[i]==' ')
break;
i++;
strncpy(last, str+i, len-i);
last[len-i] = '\0';
last_len = strlen(last);
strncpy(mid, str+first_len, len - first_len - last_len);
mid[len-first_len-last_len] = '\0';
strcpy(str,last);
strcat(str,mid);
strcat(str,first);
puts(str);
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек
- Объявление переменных:
- — const int N = 100;
- — char str[N], first[N], mid[N], last[N];
- — int i = 0, len, first_len, last_len;
- Считывание строки в переменную str с помощью функции gets()
- Вычисление длины строки с помощью функции strlen()
- Формирование подстрок:
- — первая подстрока first: копирование символов из строки str до первого пробела с помощью функции strncpy()
- — последняя подстрока last: копирование символов из строки str после последнего пробела с помощью функции strncpy()
- — средняя подстрока mid: копирование символов из строки str между первой и последней подстроками с помощью функции strncpy()
- Удаление первых и последних пробелов в подстроках first и last с помощью функции strim()
- Конкатенация подстрок first, mid и last в переменную str с помощью функций strcat()
- Вывод полученной строки на экран с помощью функции puts()
- Ожидание нажатия клавиши с помощью функции system()
- Возврат 0, т.е. успешный исход выполнения программы