C编程将字符逐字符号读入字符串

时间:2016-01-04 01:46:50

标签: c arrays pointers

基本上我正在做的是读取随机文本文件,删除标点符号并将单词排列到链接列表中。

使用此

一切正常
printf("%c", (*(buf+x)));

所以例如,文本文件具有以下

  

“他们是我们可能去的地方,”

打印正确的输出

theyre
their
where
ever
we
may
go
go

我的问题是,如何将这些转换为字符串并将它们存储在数组中?

3 个答案:

答案 0 :(得分:1)

我假设您要重用buf,因此您希望将这些单词复制到单独分配的存储中。如果在复制之前使用空字节终止buf中的每个单词,即'\0',则可以使用strdup复制它。您可以稍后使用free释放空间。添加以下内容(第二个适用于free):

#include <string.h>
#include <stdlib.h>

这是一个简单的例子:

buf[0] = 'a';
buf[1] = 'b';
buf[2] = 'c';
buf[3] = '\0';

str = strdup(buf);

答案 1 :(得分:0)

我假设您要将文件中的单词存储在数组中并打印出来。 您可以尝试以下方法:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char *buf[40];
    for (int n = 0; n < 40; n++)
    {
        buf[n] = (char*)malloc(20 * sizeof(char));
    }
    FILE *file;
    fopen_s(&file, "file.txt", "r");
    int c, i = 0, j = 0;
    bool init = 0;
    while ((c = getc(file)) != EOF)
    {
        if (c != ' ')
        {
            buf[i][j] = c;
            j++;
            init = 1;
        }
        else
        {
            if (init)
            {
                buf[i][j] = '\0';
                i++;
                j = 0, init = 0;
            }
        }
    }
    buf[i][j] = '\0';
    for (int x = 0; x <= i; x++)
    {
        printf("word[%d] : %s\n", x, buf[x]);
    }
    for (int x = 0; x < 40; x++)
    {
        free(buf[x]);
    }
    fclose(file);
    return 0;
}

答案 2 :(得分:0)

  • 尝试使用此代码来理解更好的概念:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(void)
    {
    char c;
    int i = 0, count = 0,max = 0;
    FILE *fp;
    
    fp = fopen("file.txt", "r");
    
       if(fp == 0)
       {
        printf("File is not opened\n");
       return;
       }
       else
        {
        //  Finding line having maximum characters from the file to allocate that  much memory..
           while ((c = getc(fp)) != EOF)
           {
              count++;
               if(c == '\n')
                {
                    if(count > max)
                    max = count;
                    count = 0;
                 }
                 else
                { 
                 count = 0;
                }
    
            }
        }
        rewind(fp);
    
     // Allocating the memory up to max line from the file.
        char *temp = (char*)malloc(max * sizeof(char)); 
    
          while ((c = getc(fp)) != EOF)
          {  
             if ((c >= 'a' && c<='z') || (c >= 'A' && c <= 'z'))
              {
                temp[i++] = c;
              }
              else if(c == ' ' || c == '\n')
              {
                temp[i] = '\0';
                printf("%s\n",temp);
                i = 0;
                memset(temp,'\0',max);
               }
          }
    free(temp);
    fclose(fp);
    return 0;
    }