对于字符串问题,原来理解的不够深刻,现在讨论一些关于字符串输入的问题
1.strlen() 返回的是数组中的字符串的长度,而不是数组本身的长度。
2.strlen()只计算可见的字符,而不把空字符计算在内。
那么更有意思的在后面:
char name[16] = "abcdefg"; //输出结果是多少? cout << name << endl; name[3] = '\0'; //输出结果又是多少? cout << name << endl;
大家猜猜 ?
# include <iostream> # include <cstring> # define SIZE 15 using namespace std; int main(void) { char name_cin[SIZE]; char name[SIZE] = "C++owboy"; //initialized array cout << "Hello I'm " << name; cout << "! What is your name ? "; cin >> name_cin; cout << "Well " << name_cin << ", your name has "; cout << strlen(name_cin) << " letters and is stored " << endl; cout << "in an array of " << sizeof(name_cin) << "bytes." << endl; cout << "your initial is " << name_cin[0] << "." << endl; name[3] = '\0'; cout << "Here are the first 3 characters of my name : "; cout << name << endl; return 0; }
大家猜猜结果呢?
name字符串被截断了...
释义:
数组可以用索引来访问数组的各个字符,例如name[0]找到数组的第一个字符,name[3] = '\0'; 设置为空字符,使得这个字符串在第三个字符后面即结束,即使数组中还有其他字符。
不过cin有个缺陷,就是以空白符为结束标志,如果遇到空格和回车就把这个字符串输入完了,这样就需要用能输入一行字符串的方法来解决,但是先看看这个问题:
# include <iostream> using namespace std; int main(void) { const int ArSize = 20; char name[ArSize]; char dessert[ArSize]; cout << "Enter your name : " << endl; cin >> name; //输入名字 cout << "Enter your favorite dessert: " << endl; cin >> dessert; //输入甜点的名字 cout << "I have some delicious " << dessert; cout << " for you, " << name << "." << endl; return 0; }
释义:
cin使用空白(空格、制表符、换行符)来定字符串的边界,cin在获取字符数组输入时只读取第一个单词,读取单词后,cin将该字符串放到数组中,并自动在结尾添加空字符'\0'
cin把Meng作为第一个字符串,并放到数组中,把Liang放到输入队列中第二次输入时,发现输入队列Liang,因为cin读取Liang,并将它放到dessert数组中
这时如果能输入一行数据,这个问题不就解决了吗?
getline()、get()可以实现...
# include <iostream> using namespace std; int main(void) { const int ArSize = 20; char name[ArSize]; char dessert[ArSize]; cout << "Enter you name : " << endl; cin.getline(name,ArSize); cout << "Enter you favorite dessert : " << endl; cin.getline(dessert,ArSize); cout << "I have some delicious " << dessert; cout << " for you," << name << endl; return 0; }
释义:
cin是将一个单词作为输入,而有些时候我们需要将一行作为输入,如 I love C++
iostream中类提供了一些面向行的类成员函数,如getline()和get(),这两个都是读取一行的输入,直到换行符结束,区别是getline()将丢弃换行符
get()将换行符保留在输入序列中
面向行的输入:getline(char* cha,int num)
getline()读取整行,通过换行符来确定结尾,调用可以使用 cin.getline(char* cha,int num),成员函数的方式使用,第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数,如果这个字符数的参数为30,则最多读入29个字符,余下的用于存储自动在结尾处添加的空字符。
get()存储字符串的时候,用空字符结尾。
如果遇到这种情况咋办?
# include <iostream> using namespace std; int main(void) { cout << "What year was your house built? " << endl; int year; cin >> year; //char ch; //cin.get(ch); 接收换行符 (cin >> year).get(); cout << "What is its street address ? " << endl; char address[80]; cin.getline(address, 80); cout << "Year built : " << year << endl; cout << "Address : " << address << endl; cout << "Done ! " << endl; return 0; }
地址还没有输入,就结束了...
去掉上面的注意,加一个字符,接收换行符就可以了...
注:C++程序常使用指针而不是数组来处理字符串
以上就是本文的全部内容,希望对大家的学习有所帮助。
本文向大家介绍探讨js字符串数组拼接的性能问题,包括了探讨js字符串数组拼接的性能问题的使用技巧和注意事项,需要的朋友参考一下 我们知道,在js中,字符串连接是性能最低的操作之一。 例如: 早期浏览器没有对这种运算进行优化。 由于字符串是不可变的,这意味着要创建中间字符串来存储连接的结果。频繁地在后台创建和销毁字符串导制性能异常低下。 因此,可以利用数组对象进行优化。 例如: 在早期的浏览器中,没
在程序设计中,为了方便处理,通常把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据结构。一个数组可以分解成多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按照数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 本文主要介绍一维数组、二维数组和字符数组,其余的数组将会在以后的文章中介绍到。
本文向大家介绍C++中带空格字符串的输入问题解决,包括了C++中带空格字符串的输入问题解决的使用技巧和注意事项,需要的朋友参考一下 前言 字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结。 C++用cin输入的时候会忽略空格以后的字符,比如 C++用cin输入的时候会忽略空格以后的字符,输入"hello world"输出的是"hell
我想在我的java程序中添加更多的命令,我正在用unix编写,但是在传递参数时遇到了问题。我只是在unix中输入命令之前,将文本文件作为程序参数,工作正常,但想要求输入。试着自己解决,但对java来说有点陌生 我有, 效果很好,然后试了这个,失败了 所以我犯了这些错误 CPU. java: 24:错误:不兼容的类型int计数=scanner.next线();^必需:int找到:字符串CPU. ja
本文向大家介绍探讨Ajax中的一些小问题,包括了探讨Ajax中的一些小问题的使用技巧和注意事项,需要的朋友参考一下 1.ajax跨域传递值是所需要的回传的类型为jsonp dataType 类型:String 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个
本文向大家介绍C++字符数组的输入输出和字符串结束标志使用讲解,包括了C++字符数组的输入输出和字符串结束标志使用讲解的使用技巧和注意事项,需要的朋友参考一下 C++字符数组的输入输出 字符数组的输入输出可以有两种方法: 1) 逐个字符输入输出。 2) 将整个字符串一次输入或输出。例如有以下程序段: 在运行时输入一个字符串,如: 在内存中,数组str的状态如图5.9所示,在5个字符的后面自动加了一
问题内容: 在下面的: 为什么将-127转换为63?以及如何将其恢复为-127 [编辑:]下面的Java版本(表明它不仅是“ Scala问题”) 问题答案: 您正在调用的构造函数使得二进制到字符串的转换使用解码:变得很明显。您想要的是根本不使用解码。 幸运的是,有一个构造函数:。 现在,您将数据存储在一个字符串中,但是您希望完全照原样返回它。但猜猜怎么了! 没错,还会自动应用一种编码。幸运的是,有
问题内容: 我了解C,并且正在进入Java,并且对Java处理数组和字符串的方法感到困惑。它与C中的数组和字符串完全不同。请帮助我了解C和Java(对于字符串和数组)之间的实际区别是什么。 问题答案: 在C语言中,字符串通常只是以NUL(\ 0)字符结尾的chars数组(或指向chars的指针)。您可以像处理任何数组一样处理字符串。 但是,在Java中,字符串不是数组。Java字符串是该类的实例(