2014-12-13 54 views
0

我试图让使用贪心方法以包装一个text.The点PROGRAMM是,我们不知道该行的宽度(否则,我们将使用的默认设置, 80)。任何想法?我张贴下面的代码,看看我到目前为止自动换行贪婪方法

#include<stdio.h> 
#define width 80 
int main(void) 
{ 
    int ch,m; 
    ch=getchar(); 
    while(ch!=EOF) 
    { 
     while (ch!= ' ') 
     { 
       putchar(ch); 
       m=m+1; 
       ch=getchar(); 
     } 
      if(m>width) 
     { 
      printf("\n"); 
      m=0; 
     } 
     ch=getchar(); 


    } 
    return 0; 
} 
+2

“任何想法?”不是一个非常具体的问题。 – nemetroid 2014-12-13 17:11:39

+0

任何建议:P我的代码是不正确的,当然,我需要痘痘一点帮助,以继续... – Vkt678 2014-12-13 17:18:35

+1

如果你不知道该行有多宽,你无法知道什么时候来包装。为了总结,你必须知道该行有多宽,或认为你知道的宽度(假设的宽度)。您的代码可能会显着超出宽度。如果有人把一个64字符序列,不带空格,它开始于第64位,那么你会写就行了位128个。只要这就是你想要什么,这是没有问题的。这可能不是那么有用,但这是一个单独的讨论。无论你使用什么样的宽度,你都需要考虑如何处理(如果有的话)和比文字更长的“单词”。 – 2014-12-13 17:19:11

回答

0

做当你试图读取线尺寸不详,你可以去动态内存分配的方法。

  1. 使用malloc()最初分配一些内存并开始逐字读取输入字符。
  2. 不断增加您的使用realloc()分配内存的大小,直到一个换行符遇到。

假设这是你打算做什么。(存放大小未知线,用户已经输入)

1

我想是这样的

#include<stdio.h> 
#include<stdlib.h> 
#include<ctype.h> 
int main (int argc , char **argv) 
{ 
int i=0,capacity,ch,size=0,temp=0,metr=0; 
for(i=0;i<argc;i++) 
{ 
    atoi(argv[i]); 
    if(i==1) 
    capacity=atoi(argv[i]); 
} 
printf("%d" , capacity); 
if(capacity <=0) 
{ 
    printf("ERROR wrong input"); 
    return 1; 
} 

char *data_tmp = NULL; 
char *p = malloc(capacity * sizeof(char)); 
if (p == NULL) 
{ 
    printf("ERROR"); 
    return 1; 
} 
    ch=getchar(); 
    while (ch!= EOF) 
    { 
     if (ch == '\0') 
      printf("Encoding problem"); 
      p[size++] = ch; 
      metr=metr+1; 
     if (size == capacity) 
     { 
     capacity += capacity; 
     data_tmp = realloc(p, capacity * sizeof(char)); 
     if (data_tmp == NULL) 
      printf("Malloc problem"); 
     } 

     if (metr==capacity) 
     printf(" \n"); 
     metr=0; 



    } 

    return 0; 
}