Не работает МОЙ личный код на СИ
Задача: убрать первое и последнее слово из каждой четной строки. Проблема в том, что программа работает только с нечетными строками, а при попытке как-нибудь это исправить она начинает работать некорректно
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 129
int main()
{
int i,j,k,b,l;
float n;
j = 0;
char a[20][max];
printf("strok: ");
scanf("%d",&b);
for(i=0;i<=b;i++){
gets(a[i]);
}
for(i=0;i<=b;i++)//удаляет первое слово
{
{
n=(i % 2);
j = 0;
if ( n != 0)
while (a[i][j] != 32)
{
a[i][j] = 32;
j++;
}
}
}
for(i=0;i<=b;i++) //удаляет последнее слово
{
n=(i % 2);
if (n != 0)
{
j = strlen(a[i]);
while (a[i][j] != 32)
{
a[i][j] = 32;
j--;
}
}
}
for(i=0;i<=b;i++){
puts(a[i]);
}
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Примерно так:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void removeWords(char * buf)
{
char * s = buf;
while(ispunct(*s) || isblank(*s)) ++s;
while(isalnum(*s)) ++s;
while(ispunct(*s) || isblank(*s)) ++s;
memmove(buf,s,strlen(s)+1);
s = buf + strlen(buf) - 1;
while(ispunct(*s) || isblank(*s) || *s=='\n') --s;
while(isalnum(*s)) --s;
*s++ = '\n';
*s = 0;
}
int main()
{
#define MAXLEN 512
char buf[MAXLEN];
for(int no = 1; fgets(buf,MAXLEN,stdin); ++no)
{
if (no%2==0) removeWords(buf);
printf("%3d: %s",no,buf);
}
}