riptor » 20 ноя 2007, 15:28
Помогите кто может написать программу на си которая получает от пользователя строку слов разделённой пробелами и табуляцией нужно эту строку обработать так чтобы между словами оставить только один пробел и раставить слова в алфавитном порядке и вывести на экран
вот часть кода который у меня шас есть
#include <stdio.h>
#include <string.h>
int words (char *from,char *to)
{
//char *from=buf ,*to=buf;
int l,k ;
k=0;l=0;
strcat(from," ");
*to='\0';
while(*(from+=strspn(from," \t")))
{
strncat(to,from,strcspn(from," \t"));
from=strpbrk(from," \t");
*to=' ';
k++;
}return k;}
//k++;
//l=strspn(from," \t");
//if (!l)
// *to++=l;
// *from=*to;
// while (l-->0)
// *to++=*from++;
// *to++=' ';
//}
//*to='\0';
//return k;
//}
/* int spase(char buf[])
{ char *from=buf;
for (;*from=" "|| *from=='/t';*from++);
return from;
}*/
int swop(char buf[],int l)
{
int i,k,n;
char *p ;
int tmp[80];
for (i=0;*buf+=strspn(buf," \t") && i<l;i++,buf+=strcspn(buf," \t"));
if (!*buf) return 0;
n=strspn(buf," \t");
p=buf+n+strspn(buf+n," \t");
if (!*p) return 0;
k=strcspn(buf," \t");
i=strncmp(buf,p,k);
if(i>0 || !i && n>k)
{
strncpy(tmp,buf,n+1);
for(i=0;i<=k;i++) buf=p;
strncpy(p+k-n,tmp,n+1);
return 1;}
return 0;
}
int main()
{
char buf[80],buf2[80];
int i,n,j;
i=0;j=0;n=0;
while (printf("enter string "), gets(buf))
{
//spase(buf);
n=words(buf,buf2);
for (i=1;i<n;i++)
for(j=0;j<n-1;j++)
swop(buf2,j);
printf("%s\n",buf2);
}return 0;
}
как задумывалось в первой функции должны удалятся лишнии пробелы и символы табуляци и фозвращать значение равное количеству строк
на данный момент она пока только удаляет пробелыи табуляцию.
вторая функция уже должна раставлять слава ф алфавитном порядке не знаю работает ли она правильно
можете если не трудно исправить эту или написсать свою
Помогите кто может написать программу на си которая получает от пользователя строку слов разделённой пробелами и табуляцией нужно эту строку обработать так чтобы между словами оставить только один пробел и раставить слова в алфавитном порядке и вывести на экран
вот часть кода который у меня шас есть
[quote]#include <stdio.h>
#include <string.h>
int words (char *from,char *to)
{
//char *from=buf ,*to=buf;
int l,k ;
k=0;l=0;
strcat(from," ");
*to='\0';
while(*(from+=strspn(from," \t")))
{
strncat(to,from,strcspn(from," \t"));
from=strpbrk(from," \t");
*to=' ';
k++;
}return k;}
//k++;
//l=strspn(from," \t");
//if (!l)
// *to++=l;
// *from=*to;
// while (l-->0)
// *to++=*from++;
// *to++=' ';
//}
//*to='\0';
//return k;
//}
/* int spase(char buf[])
{ char *from=buf;
for (;*from=" "|| *from=='/t';*from++);
return from;
}*/
int swop(char buf[],int l)
{
int i,k,n;
char *p ;
int tmp[80];
for (i=0;*buf+=strspn(buf," \t") && i<l;i++,buf+=strcspn(buf," \t"));
if (!*buf) return 0;
n=strspn(buf," \t");
p=buf+n+strspn(buf+n," \t");
if (!*p) return 0;
k=strcspn(buf," \t");
i=strncmp(buf,p,k);
if(i>0 || !i && n>k)
{
strncpy(tmp,buf,n+1);
for(i=0;i<=k;i++) buf[i]=p[i];
strncpy(p+k-n,tmp,n+1);
return 1;}
return 0;
}
int main()
{
char buf[80],buf2[80];
int i,n,j;
i=0;j=0;n=0;
while (printf("enter string "), gets(buf))
{
//spase(buf);
n=words(buf,buf2);
for (i=1;i<n;i++)
for(j=0;j<n-1;j++)
swop(buf2,j);
printf("%s\n",buf2);
}return 0;
} [/quote]
как задумывалось в первой функции должны удалятся лишнии пробелы и символы табуляци и фозвращать значение равное количеству строк
на данный момент она пока только удаляет пробелыи табуляцию.
вторая функция уже должна раставлять слава ф алфавитном порядке не знаю работает ли она правильно
можете если не трудно исправить эту или написсать свою