首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在C编程中使用文件中的输入数据?

如何在C编程中使用文件中的输入数据?
EN

Stack Overflow用户
提问于 2013-10-13 13:23:19
回答 2查看 196关注 0票数 0

我有一个程序使用单词搜索。我有一个数据文件,其中包含字谜和单词。我可以在我的程序中实现什么,以便它读取文件并将其中的字母存储为一个数组?

数据文件的示例(称为testdata):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
h e l l o a c d 
f g b w o r l d
h a c c v b n a 
e q b x n t q q 
y e h n c a q r
hello
world
hey

我想把所有的字母都存储在二维数组中。另外,我需要将所有单词存储在一个一维数组中。

数据文件中可能的AxA平方字母的列或行的最大行数为25。所以,我认为我应该为字母声明一个这个大小的数组,然后把它们写到那个数组中。

我只是想不出怎么把它们读入数组。数组中的每个字母后面都有一个空格,而单词中没有空格,所以我认为,在将字母放在一个数组中,在另一个数组中放置单词时,这可能会有所帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-13 19:24:52

考虑到您的问题和您的输入,有几个问题,但出于时间的考虑,目前,我已经对数组的维度做了一些假设,即它不一定是方形的(如AxA正方形的列或行所暗示的那样)。实际的数据样本不同意,所以我编写了一个例程来统计所有的数据。字母数组只是一个数组,但是由于它存储在顺序内存中,它看起来就像一个长数组。每个字符串都有自己的位置。无论如何,这段代码应该说明得足够多,让你走上正确的轨道.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <ansi_c.h>
#include <stdio.h>

void GetFileContents(char *file, int *nWords, int *lw, int *r, int *c);
void allocMemoryStr(int numStrings, int max);
void allocMemoryLtr(int numStrings, int max);
void freeMemoryStr(int numStrings);
void freeMemoryLtr(int numletters);
#define FILENAME "c:\\dev\\play\\_puzzle.txt"

char **letters;
char **strings;

int main()
{
    int  longest, cnt,  wCount, rows, cols, i;
    char line[260];
    FILE *fp;
    char *buf=0;

    GetFileContents(FILENAME, &wCount, &longest, &rows, &cols);

    allocMemoryStr(wCount, longest); //for strings
    allocMemoryLtr(rows*cols, 1); //for strings

    //read file into string arrays 
    fp = fopen(FILENAME, "r");
    cnt=0;
    for(i=0;i<rows;i++)
    {
        fgets(line, 260, fp);
        buf = strtok(line, " \n");
        while(buf)  
        {
            strcpy(letters[cnt], buf);
            buf = strtok(NULL, " \n");
            cnt++;                      //use as accurate count of words.
        }
    }
    cnt=0;
    while(fgets(line, 260, fp)) //get remainder of lines into strings
    {
        //[EDIT]removed fgets()
        buf = strtok(line, " \n");
        while(buf)  
        {
            strcpy(strings[cnt], buf);
            buf = strtok(NULL, " \n");
            cnt++;                      //use as accurate count of words.
        }
    }
    fclose(fp);
    freeMemoryStr(wCount);
    freeMemoryLtr(rows*cols);
    return 0;
}

void GetFileContents(char *file, int *nWords, int *lw, int *r, int *c)
{
    char line[260];
    FILE *fp;
    char *buf=0;
    char temp[80];
    int wc=0, rc=0, cc=0, ck=0;

    fp = fopen(FILENAME, "r");
    while(fgets(line, 260, fp))
    {
        rc++;
        buf = strtok(line, " \n");
        while(buf)  
        {   
            strcpy(temp, buf); // word handler
            if(strlen(temp) > 1) 
            {
                wc++;
                rc--; //
            }
            else if(strlen(temp) == 1) //leter handler
            {
                cc++;
                (cc>ck)?(ck=cc):(cc=cc);
            }
            buf = strtok(NULL, " \n");
        }
        cc = 0;
    }
    fclose(fp);
    *nWords = wc;
    *r = rc;
    *c = ck;
}

void allocMemoryStr(int numStrings, int max)
{
    int i;
    strings = calloc(sizeof(char*)*(numStrings+1), sizeof(char*));
    for(i=0;i<numStrings; i++)
    {
      strings[i] = calloc(sizeof(char)*max + 1, sizeof(char));
    }
}
void allocMemoryLtr(int numletters, int max)
{
    int i;
    letters = calloc(sizeof(char*)*(numletters+1), sizeof(char*));
    for(i=0;i<numletters; i++)
    {
      letters[i] = calloc(sizeof(char)*max + 1, sizeof(char));
    }
}

void freeMemoryStr(int numStrings)
{
    int i;
    for(i=0;i<numStrings; i++)
        if(strings[i]) free(strings[i]);
    free(strings);  
}
void freeMemoryLtr(int numletters)
{
    int i;
    for(i=0;i<numletters; i++)
        if(letters[i]) free(letters[i]);
    free(letters);  
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-13 13:47:32

我将逐行解析文件,逐行解析char,寻找所需的内容。在该示例(未经测试)中,我持有三个计数器以帮助正确填充数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char letters[25][25];
char words[10][25]

int letters_x_pos = 0; // Row counter
int letters_y_pos = 0; // Column counter
int words_pos = 0;

for (int i = 0; i < 25; i++) {
    for (int j = 0; j < 25; j++) {
        letters[i][j] = '\0';
    }
}

const char *line;
while (line = some_read_function()) {
    if (!(strlen(line) > 1)) {
        continue;
    }

    if (line[1] == ' ') {
        // Line contains letters
        const char *letter = line;
        while (*letter != '\0') {
            if (*letter == ' ' || *letter == '\n' || *letter == '\r') { 
                continue;
            }
            else {
                letters[letters_x_pos][letters_y_pos++] = *letter;
            }
            if (letters_y_pos == 25) {
                // Maximum reached
                break;
            }
            letter++;
        }
        // Increment row counter and reset column counter
        letters_x_pos++;
        letters_y_pos = 0;
        if (letters_x_pos == 25) {
            // Maximum reached
            break;
        }
    }
    else {
        // Line contains word
        strncpy(words[words_pos++], line, 25);
        if (words_pos == 25) {
            // Maximum reached
            break;
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19350465

复制
相关文章
六种Web身份验证方法比较和Flask示例代码
在本文中,我们将从Python Web开发人员的角度看处理Web身份验证的最常用方法。
小锋学长生活大爆炸
2022/05/14
7.5K0
六种Web身份验证方法比较和Flask示例代码
【Django | allauth】重写allauth重置密码方法
allauth中的重置密码的类视图位于allauth.account.views.PasswordResetView,我们需要在views.py中继承这个类并且重写它的post方法。
计算机魔术师
2022/08/16
1.4K0
通过GiHub 查找 API 密钥、令牌和密码
关键词: Passwords api_key “api keys” authorization_bearer: oauth auth authentication client_secret api_token: “api token” client_id password user_password user_pass passcode client_secret secret password hash OTP user auth
Khan安全团队
2022/05/17
1.1K0
通过GiHub 查找 API 密钥、令牌和密码
使用django-allauth管理用户登录与注册
 django-allauth 是非常受欢迎的管理用户登录与注册的第三方 Django 安装包,django-allauth 集成了 local 用户系统 和 social 用户系统,其 social 用户系统 可以挂载多个账户。 django-allauth 能实现以下核心功能:
菲宇
2019/06/13
6.9K0
Django开发常用30个软件包
Django是一款高级的Python Web框架,可以帮助开发者快速创建web应用。我们这里整理了30款Django开发中常用的软件包,学会使用它们可以节省大量开发时间,提高开发效率。下面一起来看下。   认证和授权  1. Python social auth 一款社交账号认证/注册机制,支持Django、Flask、Webpy等在内的多个开发框架,提供了约50多个服务商的授权认证支持,如Google、Twitter、新浪微博等站点,配置简单。
菲宇
2022/12/21
3.4K0
如何创建MySQL用户帐户和授予权限
MySQL是最流行的开源关系数据库管理系统。 MySQL服务器允许我们创建大量用户帐户并授予适当的权限,以便用户可以访问和管理数据库。
星哥玩云
2022/08/18
2.6K0
如何创建MySQL用户帐户和授予权限
【Django | allauth】登录_注册_邮箱验证_密码邮箱重置
如果觉得邮箱提示地址 example.com 名字太丑,还可以在admin 中修改 display\_name
计算机魔术师
2022/08/16
3.9K0
简化 Django 开发的八个 Python 包 | Linux 中国
这个月的 Python 专栏将介绍一些 Django 包,它们有益于你的工作,以及你的个人或业余项目。-- Jeff Triplett
用户7886150
2020/12/30
3K0
[博客搭建] 通过用户邮箱认证来介绍 django-allauth 的使用思路
我的博客使用了 django-allauth 应用插件,所以是支持 Oauth2.0 协议的第三方账号登录(Github 和 Weibo)。同时,博客支持邮箱注册登录,不过我之前关闭了邮箱认证,现在已经开启验证功能,用户注册和登录之后都可以选择是否进行认证,当然,认证的用户肯定会有特权,至于什么特权,请看本文介绍。
Hopetree
2022/09/26
6250
[博客搭建]  通过用户邮箱认证来介绍 django-allauth 的使用思路
授权服务是如何颁发授权码和访问令牌的?
授权服务如何生成访问令牌? 访问令牌过期了而用户又不在场的情况下,又如何重新生成访问令牌?
JavaEdge
2021/02/23
2.8K0
授权服务是如何颁发授权码和访问令牌的?
Django教程(一)- Django视图与网址1.简介2.环境搭建3.安装pycharm4.Ubuntu下 正确安装VMware Tools5.Django主要模块6.Django基本命令7. Dj
Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!
Python攻城狮
2018/08/23
1.4K0
Django教程(一)- Django视图与网址1.简介2.环境搭建3.安装pycharm4.Ubuntu下 正确安装VMware Tools5.Django主要模块6.Django基本命令7. Dj
【Django | allauth】useprofile 用户模型扩展
在allauth 包中复制粘贴templates 的account包到该项目的templates的account下,原因:
计算机魔术师
2022/08/16
1.1K0
15款Django开发常用软件包 原
1. Python social auth 一款社交账号认证/注册机制,支持Django、Flask、Webpy等在内的多个开发框架,提供了约50多个服务商的授权认证支持,如Google、Twitter、新浪微博等站点,配置简单。  
晓歌
2018/08/15
2.1K0
访问令牌JWT
By reference token(透明令牌),随机生成的字符串标识符,无法简单猜测授权服务器如何颁 发和存储资源服务器必须通过后端渠道,发送回OAuth2授权服务器的令牌检查端点,才能校验令牌 是否有效,并获取claims/scopes等额外信息
乐心湖
2020/08/02
1.7K0
关于Web验证的几种方法
验证(Authentication)是具备权限的系统验证尝试访问系统的用户或设备所用凭据的过程。相比之下,授权(Authorization)是给定系统验证是否允许用户或设备在系统上执行某些任务的过程。 简单地说: 身份验证:你是谁? 授权:你能做什么? 身份验证先于授权。也就是说,用户必须先处于合法状态,然后才能根据其授权级别被授予对资源的访问权限。验证用户身份的最常见方法是用户名和密码的组合。用户通过身份验证后,系统将为他们分配不同的角色,例如管理员、主持人等,从而为他们授予一些特殊的系统权限。 接下来,我们来看一下用于用户身份验证的各种方法。
程序狗
2021/12/09
3.9K0
访问令牌过期后,如何自动续期?
JWT是JSON Web Token的缩写,是为了在网络应用环境间传递声明而执行的- -种基于JSON的开放标准((RFC 7519)。JWT本身没有定义任何技术实现,它只是定义了一种基于Token的会话管理的规则,涵盖Token需要包含的标准内容和Token的生成过程,特别适用于分布式站点的单点登录(SSO) 场景。
Tinywan
2023/03/08
2.7K0
访问令牌过期后,如何自动续期?
【壹刊】Azure AD B2C(一)初识
  上一节讲到Azure AD的一些基础概念,以及如何运用 Azure AD 包含API资源,Azure AD 是微软提供的云端的身份标识和资源访问服务,帮助员工/用户/管理员访问一些外部资源和内部资源:
老张的哲学
2022/04/11
2.3K0
【壹刊】Azure AD B2C(一)初识
GIF动图只能用做表情包?黑客拿来入侵微软视频会议软件
说到GIF动图,大家可能第一反应是手机微信里那各式各样的表情包了,用表情包斗图是现在人们的一种沟通方式。然而,GIF动图到了黑客手里,就不仅是一种“沟通方式”了。
FB客服
2020/05/04
1.6K0
OAuth 2.0身份验证
浏览网络时,几乎可以肯定您会遇到一些使您可以使用社交媒体帐户登录的网站,该功能很可能是使用流行的OAuth 2.0框架构建的,OAuth 2.0对于攻击者来说非常有趣,因为它非常常见,而且天生就容易出现实现错误,这可能导致许多漏洞,从而使攻击者可以获得敏感用户数据,并有可能绕过身份验证。
Al1ex
2021/04/22
3.5K0
OAuth 2.0身份验证
动态令牌_创建安全令牌
HMAC-based One-Time Password 简写,表示基于 HMAC 算法加密的一次性密码。是事件同步,通过某一特定的事件次序及相同的种子值作为输入,通过 HASH 算法运算出一致的密码。
全栈程序员站长
2022/11/17
1.5K0
动态令牌_创建安全令牌

相似问题

如何创建用于测试的django-allauth常规和社交帐户?

10

Django-Allauth :帐户创建视图上没有社交按钮?

13

django-allauth社交帐户已存在

10

如何在django管理员中隐藏/注销django-allauth创建的帐户和社交帐户?

222

django-allauth社交帐户在登录时连接到现有帐户

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文