zoukankan      html  css  js  c++  java
  • 1059 老师的苦恼

    【关于思路】

    • 思路很简单,把char类型的字符当作int类型处理,利用ASCII中“大写字母” + 32 = “小写字母”的原理,遍历字符串,将大写字母替换为小写字母。

    【出现的问题】

    • 虽然程序很简单,但是其中还是有一些被我忽略的内容。
    • 以下是我第一次提交的代码,系统表示Wrong Anwser。
        #include<iostream>
        #include<string>
        using namespace std;
    
        int main()
        {
            string words;
            cin >> words;
    
            int  i = 0;
            int  len = words.size();
    
            for(i = 0; i  < len; i++)    //遍历字符串
            {
                if(words[i] >= 'A‘ && words[i] <= 'Z')
                {
                    words[i] += 32;    //发现大写字母改为小写字母
                }
            }
            cout << words;
    
            return 0;
        }
    
    • 问题在于我忽略了题目要求能够输入多组数据,我只考虑了输入一组程序的情形,以下是修改的代码,成功通过系统测试:
        #include<iostream>
        #include<string>
        using namespace std;
    
        int  main()
        {
            string words;
    
            while(getline(cin, words))
            {
                int i = 0;
                int len = words.size();
    
                for(i = 0; i < len; i++)
                {
                    if(words[i] >= 'A' && words[i] <= 'Z')
                    {
                        words[i] += 32;
                    }
                }
                cout << words << endl;
            }
    
            return 0;
        }
    
    • 以下是C风格的代码,思想相同,代码上稍有区别:
        #include<stdio.h>
        #include<string.h>
    
        int main()
        {
            char words[55];
    
            while(scanf("%s, &words") != EOF)
            {
                int i = 0;
                int len = strlen(words);
    
                for(i = 0; i < len; i++)
                {
                    if(words[i] >= 'A‘ && words[i] <= 'Z')
                    {
                        words[i] += 32;
                    }
                }
                puts(words);
            }	
    
            return 0;
        }
    

    【学习到的东西】

    • 这段代码那么简单,我之所以还花时间把它贴到博客上来,是因为其中有些只是确实是我长期以来都不知道,敲完这篇代码才懂得的。
    1. 关于getline函数 --> C++风格
      用getline可以读取整行文本,不会因为一句话中出现一个空格就结束输入,它能够一直读入到某一特定字符结束读入。
      getline()的原型是istream& getline ( istream &is , string &str , char delim ),其中 istream &is 表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中;char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为' ',也就是回车换行符(遇到回车停止读入)。
      以上内容来源,这里头讲的很清楚
    2. 关于EOF(End Of File)--> C风格
      EOF表示文字流(stream)的结尾。这里的"文字流",可以是文本文件,也可以是标准输入。
      在网上看到有些人表示这句话不好理解,其实放到本例应用中,就清楚明白许多,例:while(scanf("%s, & words" ) != EOF):本例的执行效果为每当有字符串输入就执行循环语句,所以这里EOF的意义就是判断是否有数据输入,即是否到达文字流末端,还有没有数据。
      这些内容百科上讲的相当详细
  • 相关阅读:
    变量
    python3基础知识
    __kindof的用法
    廖雪峰Python电子书总结
    解决嵌套在ScrollView中的TableView滑动手势冲突问题
    20180329-layoutSubviews的调用机制
    20180315-Python面向对象编程设计和开发
    20180308-Python内置方法
    20180306-time&datetime模块
    20180305-Python中迭代器和生成器
  • 原文地址:https://www.cnblogs.com/wyq0808/p/5382810.html
Copyright © 2011-2022 走看看