| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7037 人关注过本帖
标题:两种方法将一段英文文字拆分成单词依次输出,但是一个成功,一个失败
只看楼主 加入收藏
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
结帖率:90%
收藏
已结贴  问题点数:10 回复次数:20 
两种方法将一段英文文字拆分成单词依次输出,但是一个成功,一个失败
#define _STDC_WANT_LIB_EXT1_1
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>
#define max_word 20

size_t wordscount(char *);
char** wordfind(char*, char** const);
main(void)
{
    size_t str_size = 1000;
    char buf_len[100];
    char *str_len = malloc(str_size);
    *str_len = '\0';
    char* ptemp = NULL;
    while (true)
    {
        gets_s(buf_len, sizeof(buf_len));
        if (buf_len[0] == '\0')
            break;
        if (strlen(buf_len) + strlen(str_len) + 1 > str_size)
        {
            str_size = str_size + 100;
            ptemp = realloc(str_len, str_size);
            str_len = ptemp;
            ptemp = NULL;
        }
        if (strcat_s(str_len, str_size, buf_len))
        {
            printf("Somethings wrong!The string concatenation failed!\n");
            return 1;
        }
    }
    printf("the words number is %zd\n", wordscount(str_len));

    char** words = malloc(wordscount(str_len)*sizeof(char*));
    for (size_t i = 0; i < wordscount(str_len); i++)
    {
        *(words+i) = (char*)malloc(max_word);
    }
    char** pstr_len=wordfind(str_len, words);
    for (size_t i = 0; i < wordscount(str_len); i++)
    {
        printf("%s\n", pstr_len[i]);
    }
   
    return 0;
}
size_t wordscount(char* pstr)
{
    size_t i = 0;
    size_t count = 0;
    while (pstr[i] != '\0')
    {
        if (!isalpha(pstr[i]))
        {
            if (pstr[i] == ',')
            {
                i++;
                continue;
            }
            else
            {
                count++;
            }
        }
        i++;
    }
    return count;
}
char** wordfind(char* pstr, char** const words)
{
    size_t i = 0;
    size_t j = 0;
    int count = 0;
    while (pstr[i] != '\0')
    {
        if (pstr[i] == ',')
        {
            i++;
            continue;
        }
        if (isalpha(pstr[i]))
        {
            words[count][j] = pstr[i];
            i++;
            j++;
        }
        else
        {
            words[count][j] = '\0';
            count++;
            j = 0;
            i++;
        }
    }
    return words;
}
这是第一个方法,成功了。
#define _STDC_WANT_LIB_EXT1_1
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>
#define max_word 20

size_t wordscount(char *);
char** wordfind(char*, char** const);
main(void)
{
    size_t str_size = 1000;
    char buf_len[100];
    char *str_len = malloc(str_size);
    *str_len = '\0';
    char* ptemp = NULL;
    while (true)
    {
        gets_s(buf_len, sizeof(buf_len));
        if (buf_len[0] == '\0')
            break;
        if (strlen(buf_len) + strlen(str_len) + 1 > str_size)
        {
            str_size = str_size + 100;
            ptemp = realloc(str_len, str_size);
            str_len = ptemp;
            ptemp = NULL;
        }
        if (strcat_s(str_len, str_size, buf_len))
        {
            printf("Somethings wrong!The string concatenation failed!\n");
            return 1;
        }
    }
    printf("the words number is %zd\n", wordscount(str_len));

    char** words = malloc(wordscount(str_len)*sizeof(char*));
    for (size_t i = 0; i < wordscount(str_len); i++)
    {
        *(words+i) = (char*)malloc(max_word);
    }
    char** pstr_len=wordfind(str_len, words);
    for (size_t i = 0; i < wordscount(str_len); i++)
    {
        printf("%s\n", pstr_len[i]);
    }
   
    return 0;
}
size_t wordscount(char* pstr)
{
    size_t i = 0;
    size_t count = 0;
    while (pstr[i] != '\0')
    {
        if (!isalpha(pstr[i]))
        {
            if (pstr[i] == ',')
            {
                i++;
                continue;
            }
            else
            {
                count++;
            }
        }
        i++;
    }
    return count;
}
char** wordfind(char* pstr, char** const words)
{
    char delimiters[] = " \n,.;:?";
    char* strword = NULL;
    char* pword = strtok_s(pstr, delimiters, &strword);
    size_t i = 0;
    while (pword)
    {
        strcpy_s(words[i],strlen(pword)+1,pword);
        i++;
        pword = strtok_s(NULL, delimiters, &strword);
    }
    return words;
}

这是第二种方法失败了。
搜索更多相关主题的帖子: 单词 英文 include 
2016-01-03 16:40
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
先定义两个自定义函数,一个是确定英文段落中单词个数,另一个函数是进行单词分割,存储在一个指针的指针里。
两种方法确定单词个数的函数是一样的,不一样的是分割单词的方法,第一种方法是搜寻英文段落每一个字符,只要是英文字符就放到数组里,当碰到空格或者是标点符号,表示一个单词存储完毕,换另一个单词进行存储。
第二种方法,利用strtok_s进行单词分割,找到一个单词就存到数组里,但是这种方法失败了,但是我到不到原因,希望大神给个指点,本人C语言全是自学的,如果有知道原因的,请说详细一些,谢谢。
2016-01-03 16:47
匆匆来过
Rank: 1
来 自:广州
等 级:新手上路
帖 子:26
专家分:9
注 册:2015-12-27
收藏
得分:0 
帮不了你,坐等大神解答吧

努力打代码
2016-01-03 17:03
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
strtok_s这个函数没用过,你最好查查用

一片落叶掉进了回忆的流年。
2016-01-03 17:06
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 4楼 诸葛欧阳
我用的没有问题,如果不用自定义函数的方法,只用main函数是可以的
2016-01-03 17:08
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
第一个成功了?我咋编译不成功呢?
2016-01-03 17:51
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 6楼 ehszt
不可能,我用的vs2015 community,是不是编译器的问题,我用的是c11编写的。
2016-01-03 18:49
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 7楼 foxeer
我刚又用vs2015编译成功了,可是你这程序该怎么玩?输入I love you.回车没反应呀!
2016-01-03 19:06
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
我用的是gets_s 给buf_len[100]输入字符,想结束输入时,按两下回车,具体输入是,先输入一行字母,然后按第一下回车,gets_s输入的字符串连接到str_len的指针里,当不想输入时,再按一下回车,buf_len[0] == '\0'条件满足,输入结束,这样的好处是,我可以无限输入我想输入的字符个数。
2016-01-03 19:13
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
刚试了下,逗号分不开!
2016-01-03 19:25
快速回复:两种方法将一段英文文字拆分成单词依次输出,但是一个成功,一个失败
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.075294 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved