hdu 1161 Eddy's mistakes(字符串:读入一行)

2024-06-14 03:32

本文主要是介绍hdu 1161 Eddy's mistakes(字符串:读入一行),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很水的一道题,考察的就是读入一行字符串

之前一直没有认真学习过,今天发现了一篇很不错的博客

分享一下:

AC代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char str[1001];
int main(void) {while(cin.getline(str, 1000)) {int len = strlen(str);for(int i=0; i<len; ++i)if(str[i] != ' ')printf("%c", tolower(str[i]));else printf("%c", str[i]);printf("\n");}return 0;
}

原文: http://www.wutianqi.com/?p=1181

------------------------------------------------------------------------------------

大家在学习C++编程时,一般在输入方面都是使用的cin.
而cin是使用空白(空格,制表符和换行符)来定字符串的界的。
这就导致了对于带有空格的字符串,比如”I Love www.CppLeyuan.com”
只能读入”I”,后面的都无法读入。
这时怎么办?
(论坛:www.cppleyuan.com)


 一.对于字符数组:
方法一:getline()
读入整行数据,它使用回车键输入的换行符来确定输入结尾。
调用方法: cin.getline(str, len);
第一个参数str是用来存储输入行的数组名称,第二个参数len是要读取的字符数。

#include <iostream>
using namespace std;int main()
{char str[30];cin.getline(str, 30);cout << str << endl;return 0;
}


方法二:get()


调用方法:cin.get(str, len);

#include <iostream>
using namespace std;int main()
{char str[30];cin.get(str, 30);cout << str << endl;return 0;
}


那么两者有何区别?
两者都读取一行输入,直至换行符。
然后,getline将丢弃换行符,而get()将换行符保留在输入序列里。
所以,再使用cin.get()输入多行数据时,中间可以使用get()消除换行符。

#include <iostream>
using namespace std;int main()
{char str1[30], str2[30];cin.get(str1, 30);cin.get();cin.get(str2, 30);cout << "str1: " << str1 << endl;cout << "str2: " << str2 << endl;return 0;
}

因为get(str, len)和get()都是cin的类成员,所以可以合并起来写:

#include <iostream>
using namespace std;int main()
{char str1[30], str2[30];cin.get(str1, 30).get();   // 注意这里!cin.get(str2, 30);cout << "str1: " << str1 << endl;cout << "str2: " << str2 << endl;return 0;
}

(欢迎大家去我论坛学习:C++奋斗乐园:http://www.cppleyuan.com)


二.对于string类
方法一:getline(cin, str)


这说明这里的getline不是类方法。

#include <iostream>
#include <string>
using namespace std;int main()
{string str;getline(cin, str);cout << str << endl;return 0;
}

PS:以后如果对输入方面还有更多了解,会继续补充,希望大家支持,多多交流。


Tanky Woo @ 2010-08-31
8 Comments
Category: C/C++, 我的原创
Tags: cin, get, getline, 原创, 输入, 输入整行

这篇关于hdu 1161 Eddy's mistakes(字符串:读入一行)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059253

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c