HDU 2072 单词数 --- 字符串处理

/* HDU 2072 单词数 --- 字符串处理 */
#include <cstdio> //C语言改成stdio.h即可
#include <cstring> //C语言改成string.h即可

const int maxn = 85;

int main()
{
    char *head1, *head2;
    char a[maxn];
    char b[maxn][maxn];
    int i, k, len, cnt1, cnt2;

    while (gets(a)){
        //遇到字符串"#‘则结束
        if (‘#‘ == a[0]){
            break;
        }

        //处理末尾的连续空格
        len = strlen(a);
        for (i = len - 1; i >= 0; --i){
            if (‘ ‘ == a[i]){
                a[i] = 0; //末尾有空格则用空字符替换
            }
            else
                break;
        }//for(i)

        //处理开头的连续空格
        len = strlen(a);
        if (len == 0){ //全是空格的情况特殊处理
            printf("0\n");
            continue;
        }
        for (i = 0; i < len; ++i){
            if (‘ ‘ == a[i]){
                a[i] = 0;
            }
            else{
                //遇到非空格
                head1 = a + i; //记录新的开头
                break;
            }
        }//for(i)

        len = strlen(head1);
        //在字符串末尾补上一个空格以便处理最后一个单词
        head1[len] = ‘ ‘;
        head1[len + 1] = 0; 

        head2 = head1;
        cnt1 = 0; //cnt1统计单词数(可能重复)
        for (i = 0; i <= len; ++i){
            if (‘ ‘ == head1[i]){
                head1[i] = 0;
                //当前点是空格而后一个点不是空格 则后一个点即为新的单词起点
                if (‘ ‘ != head1[i + 1]){
                    //记录上一个单词并更新单词数
                    strcpy(b[cnt1], head2);
                    ++cnt1;
                    head2 = head1 + i + 1; //更新新的单词起点
                }
            }
        }//for(i)

        //处理相同的单词数
        cnt2 = cnt1;
        for (i = 0; i < cnt1; ++i){
            if (b[i][0] != ‘#‘){
                for (k = i + 1; k < cnt1; ++k){
                    if (b[k][0] != ‘#‘ && strcmp(b[i], b[k]) == 0){
                        --cnt2;
                        b[k][0] = ‘#‘; //已经判断是否重复则不再判断
                    }
                }//for(k)
                b[i][0] = ‘#‘; //到此 和b[i]相同的单词第一个字符已经全部设置成‘#‘
            }//if
        }//for(i)
        printf("%d\n", cnt2);
    }//while(gets)

    return 0;
}

时间: 2024-10-14 10:41:11

HDU 2072 单词数 --- 字符串处理的相关文章

HDU 2072 单词数 --- stringstream+STL

/* HDU 2072 单词数 --- stringstream+STL */ #include <cstdio> #include <iostream> #include <sstream> #include <string> #include <set> using namespace std; set<string> k; int main() { string s; while (getline(cin, s) &&a

HDU 2072 单词数 (STL map)

单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 34960    Accepted Submission(s): 8380 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Inp

hdoj 2072 单词数 【字符串处理】

题目大意: 输入一组字符串,只由小写字母和空格组成,让你统计不同单词的个数,注意是不同的个数 . 特殊数据 1,直接输入一个换行,应该输出0 2,连续输出多个空格 在加上一个换行 应该输出0 3,输入 "ni shi wo wo de de de de hao     hao "应该输出5 6, 输入" 空格空格ni空格空格shi     " 应该输出2 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2072 #in

hdu 2072 单词数

http://acm.hdu.edu.cn/showproblem.php?pid=2072 单词数这道题感觉用c写很麻烦,用c++写就比较简单了.不多说,直接贴代码. #include<iostream> #include<string> #include<vector> #include<sstream> using namespace std; int main() { vector<string> s; string s0,s1; int

HDU 2072(单词数)题解

以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] “就是统计一篇文章里不同单词的总数”(已经是一句话了..) [题目分析] 明显需要去重,上set,因为按行分析,又没有EOLN用,于是上istringstream. [算法流程] 读一行塞一行干一行爱一行.....发这篇的目的其实是备忘istringstream的用法的.这道题没难点. 1 #include <iostream> 2 #include <sstream> 3 #include <strin

洛谷 P1308 统计单词数【字符串+模拟】

P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置.注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章 中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 ). 输入输出格式 输入格式: 输入文件

JSK-27321 统计单词数【字符串】

统计单词数 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置. 注意:匹配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例 1), 如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例 2). 输入格式 第 1 行为一个字符串,其中只含字母,表示

hdu 2072单词数

单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 28671    Accepted Submission(s): 6877 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Inp

C语言 &#183; 单词数统计

单词数统计 输入一个字符串,求它包含多少个单词. 单词间以一个或者多个空格分开. 第一个单词前,最后一个单词后也可能有0到多个空格. 比如:" abc    xyz" 包含两个单词,"ab   c   xyz    "  包含3个单词. 1 #include<stdio.h> 2 #include<string.h> 3 int get_word_num(char* buf){ 4 int n = 0; 5 int tag = 1; 6 ch