| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7017 人关注过本帖
标题:两种方法将一段英文文字拆分成单词依次输出,但是一个成功,一个失败
只看楼主 加入收藏
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 10楼 ehszt
i, love you.

the words number is 3
i
love
you
请按任意键继续. . .
这是我运行的结果,可以识别,忘了告诉你,我的程序只能识别,。和空格
2016-01-03 19:32
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
你的逗号和love中有一空格
2016-01-03 19:43
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 12楼 ehszt
可能这个和个人喜欢有关吧,我一般都会加个空格,所以程序就这么编写了
2016-01-03 23:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你失敗是什麽現象?

授人以渔,不授人以鱼。
2016-01-03 23:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
程序代码:
/*
    C++/CLR 版本
    編譯:VS中創建C++/CLR項目,或在命令行中用cl /clr參數編譯
*/

using namespace System;

int main(array<String^>^ args)
{
    // 分割符清單
    array<Char>^ DelimitChar_Array = { ' ', ',', '!', '.', '?', '\'', '\"' };

    Console::WriteLine(L"請輸入一行文本,回車結束:");
    String^ text = Console::ReadLine();
    Console::WriteLine("\n結果:");
    // 獲得分割單詞數組(第二個參數表示在結果中移除空串)
    array<String^>^ arrSplit = text->Split(DelimitChar_Array, StringSplitOptions::RemoveEmptyEntries);
    // 遍歷數組輸出結果
    for each (String^ word in arrSplit)
    {
        Console::WriteLine(L"{0}", word);
    }

    Console::ReadKey(true);
    return 0;
}

授人以渔,不授人以鱼。
2016-01-04 01:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
/*
    C++11版本
    編譯:VS(或其他支持C++11標準的編譯器)中創建C++控制臺項目,或在命令行中用cl編譯
*/

#include <iostream>
#include <string>
#include <vector>
#include <conio.h>

const char DelimitChar_Array[] = { ' ', ',', '!', '.', '?', '\'', '\"' };

std::vector<std::string> Split(const std::string& text, const char* delimits)
{
    std::vector<std::string> result;

    std::string::size_type beginIndex, endIndex;
    beginIndex = text.find_first_not_of(delimits);
    while (beginIndex != std::string::npos)
    {
        endIndex = text.find_first_of(DelimitChar_Array, beginIndex);
        if (endIndex == std::string::npos)
        {
            endIndex = text.length();
        }
        result.push_back(std::string(text, beginIndex, endIndex - beginIndex));
        beginIndex = text.find_first_not_of(DelimitChar_Array, endIndex);
    }

    return result;
}

int main(void)
{
    std::cout << "請輸入一行文本,回車結束:" << std::endl;
    std::string text;
    if (std::getline(std::cin, text))
    { 
        std::cout << "結果:" << std::endl;
        std::vector<std::string> arrSplit = Split(text, DelimitChar_Array);
        for (std::string word : arrSplit)
        {
            std::cout << word << std::endl;
        }
    }

    _getch();
    return 0;
}


[此贴子已经被作者于2016-1-4 02:41编辑过]


授人以渔,不授人以鱼。
2016-01-04 02:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
/*
    C 版本(C++編譯器C風格代碼)
    編譯:VS中創建C++控制臺項目,或在命令行中用cl編譯
*/

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

const size_t MAX_LENGTH = 80;            // 字符串最大寛度
const size_t MAX_WORD_NUMBER = 50;        // 最大單詞數

const char DelimitChar_Array[] = { ' ', ',', '!', '.', '?', '\'', '\"', '\n', '\0' };

size_t Split(const char* text, size_t size, char result[][MAX_LENGTH + 1])
{
    char* buffer = (char*)malloc(size);
    strncpy_s(buffer, size, text, size);

    size_t count = 0;

    char* next_token;
    char* token = strtok_s(buffer, DelimitChar_Array, &next_token);
    while (token)
    {
        strncpy_s(result[count++], MAX_LENGTH + 1, token, MAX_LENGTH + 1);
        token = strtok_s(NULL, DelimitChar_Array, &next_token);
    }
    free(buffer);

    return count;
}

int main(void)
{
    printf_s("請輸入一行文本,回車結束:\n");
    char text[MAX_LENGTH + 1];
    fgets(text, MAX_LENGTH + 1, stdin);
    if (text[0] != '\n')
    {
        printf_s("結果:\n");
        char arrSplit[MAX_WORD_NUMBER][MAX_LENGTH + 1];
        const size_t count = Split(text, MAX_LENGTH + 1, arrSplit);
        for (size_t i = 0; i < count; ++i)
        {
            printf_s("%s\n", arrSplit[i]);
        }
    }

    _getch();
    return 0;
}

授人以渔,不授人以鱼。
2016-01-04 03:36
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
谢大神,我的最后也改好了,但是有个问题,size_t wordscount(str_len)这个函数,用在for(size_t i=0;i< wordscount(str_len);i++)根本无法循环,但是赋值后size_t a=wordscount(str_len)然后
for(size_t i=0;i< a;i++)循环就可以显示结果,到底是为什么
2016-01-04 12:16
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 17楼 TonyDeng
谢大神,我的最后也改好了,但是有个问题,size_t wordscount(str_len)这个函数,用在for(size_t i=0;i< wordscount(str_len);i++)根本无法循环,但是赋值后size_t a=wordscount(str_len)然后
for(size_t i=0;i< a;i++)循环就可以显示结果,到底是为什么
2016-01-04 12:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 19楼 foxeer
循环体存在改变函数返回值的代码吧

授人以渔,不授人以鱼。
2016-01-04 12:51
快速回复:两种方法将一段英文文字拆分成单词依次输出,但是一个成功,一个失败
数据加载中...
 
   



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

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