关于string和stringstream的用法
2015-01-11 20:41
197 查看
文章来源:http://blog.csdn.net/xw20084898/article/details/21939811
一、string
string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必須先加入这一行:
接下來要宣告一个字串变量,可以写成:
我们也可以在宣告的同时让它设成某个字串:
而要取得其中某一個字元,和传统C 的字串一樣是用 s[i] 的方式取得。比较不一樣的是如果 s 有三個字元,傳統 C 的字串的 s[3] 是 0 字元,但是 C++ 的 string 則是只到 s[2] 这個字元而已。
下面我们把 string 與 字元陣列的語法做一個對照:
从上面的表格,我們可以发现 string 的用法比较直观,因此如果沒有特別的需要,尽量使用 string 會比較方便。
二、stringstream
stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的 iostream、fstream 有类似的操作方式。要使用 stringstream,
必須先加入這一行:
stringstream 主要是用在將一個字串分割,可以先用 clear( )以及 str( ) 將指定字串設定成一开始的內容,再用 >> 把个別的资料输出,例如:
下面我們看到一個使用 stringstream 的例子:
題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來。
輸入:
3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999
輸出:
6
251
4995
程式如下:
string类型是c语言中char *类型的一种更便利的实现。使用这个类型,不用再去刻意考虑内存的事儿。在做快速开发的时候,string对象提供的便利,还是相当出色的。然而,在这儿提醒一下:string类型很有可能成为一个工程效率问题的根源,产品级别的应用当中,应该尽量避免在深层循环嵌套中使用string类型。
除size()外,另外两个string常用的方法是find和substr。在下面的代码当中:
string
str = "aaaaddddssdfsasdf";
size_t
pos = str.find("ssdf", 3); //用if(pos
== string::npos) 用来判断是否找到子串。
string
str2 = str.substr(pos, 5);
find函数从str的第3个位置查起,找到ssdf这个子串后,返回子串的位置。而substr函数从pos位置开始,截取5个字符,赋值给str2。也就是说,str2之后的内容将是ssdfs。
stringstream是字符串流,经常被我用来作数据切分或者类型转化。一个经常被我用到的函数如下:
string i2s(int i, int len = 0)
{
stringstream
ss;
ss
<< setw(len) << setfill('0') << i;
return
ss.str():
}
以i2s(7,
3)形式调用这个函数,返回的结果是字符串007。我通常在循环里,这样产生或者遍历一些文件。
使用stringstream对象简化类型转换
一、string
string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必須先加入这一行:
#include <string>
接下來要宣告一个字串变量,可以写成:
string s;
我们也可以在宣告的同时让它设成某个字串:
string s="TCGS";
而要取得其中某一個字元,和传统C 的字串一樣是用 s[i] 的方式取得。比较不一樣的是如果 s 有三個字元,傳統 C 的字串的 s[3] 是 0 字元,但是 C++ 的 string 則是只到 s[2] 这個字元而已。
下面我们把 string 與 字元陣列的語法做一個對照:
操作 | string | 字元陣列 |
宣告字串 | string s; | char s[100]; |
取得第 i 個字元 | s[i] | s[i] |
字串長度 | s.length() 或 s.size() | strlen(s) |
读取一行 | getline(cin, s); | gets(s); |
设成某字串 | s="TCGS"; | strcpy(s, "TCGS"); |
字串相加 | s=s+"TCGS"; s+="TCGS" | strcat(s, "TCGS"); |
字串比较 | s=="TCGS" | strcmp(s, "TCGS") |
二、stringstream
stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的 iostream、fstream 有类似的操作方式。要使用 stringstream,
必須先加入這一行:
#include <sstream>
stringstream 主要是用在將一個字串分割,可以先用 clear( )以及 str( ) 將指定字串設定成一开始的內容,再用 >> 把个別的资料输出,例如:
string s; stringstream ss; int a, b, c; getline(cin, s); ss.clear(); ss.str(s); ss >> a >> b >> c;
下面我們看到一個使用 stringstream 的例子:
題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來。
輸入:
3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999
輸出:
6
251
4995
程式如下:
string s; stringstream ss; int n, i, sum, a; cin >> n; getline(cin, s); // 讀取換行 for (i=0; i<n; i++) { getline(cin, s); ss.clear(); ss.str(s); sum=0; while (1) { ss >> a; if ( ss.fail() ) break; sum+=a; } cout << sum << endl; }
string类型是c语言中char *类型的一种更便利的实现。使用这个类型,不用再去刻意考虑内存的事儿。在做快速开发的时候,string对象提供的便利,还是相当出色的。然而,在这儿提醒一下:string类型很有可能成为一个工程效率问题的根源,产品级别的应用当中,应该尽量避免在深层循环嵌套中使用string类型。
除size()外,另外两个string常用的方法是find和substr。在下面的代码当中:
string
str = "aaaaddddssdfsasdf";
size_t
pos = str.find("ssdf", 3); //用if(pos
== string::npos) 用来判断是否找到子串。
string
str2 = str.substr(pos, 5);
find函数从str的第3个位置查起,找到ssdf这个子串后,返回子串的位置。而substr函数从pos位置开始,截取5个字符,赋值给str2。也就是说,str2之后的内容将是ssdfs。
stringstream是字符串流,经常被我用来作数据切分或者类型转化。一个经常被我用到的函数如下:
string i2s(int i, int len = 0)
{
stringstream
ss;
ss
<< setw(len) << setfill('0') << i;
return
ss.str():
}
以i2s(7,
3)形式调用这个函数,返回的结果是字符串007。我通常在循环里,这样产生或者遍历一些文件。
使用stringstream对象简化类型转换
相关文章推荐
- 关于String、Function、Array的属性和用法
- ostringstream、istringstream、stringstream用法(转载)
- 关于String数组的用法
- 关于stringstream的用法
- 关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
- 个人总结的一些关于String、Function、Array的属性和用法
- 命令行参数:关于java程序中main函数的String[] args参数的用法
- 关于String.format的用法
- 关于jstl EL用法的注意点(java.lang.NumberFormatException: For input string: "userName")
- Android--关于String.xml中<xliff:g >标签的用法
- 关于jstl EL用法的注意点(java.lang.NumberFormatException: For input string: "userName")
- 关于C++的String用法(新手向)
- 关于C++的String用法(新手向)
- 关于C语言中的连接符的用法 # ## macro stringize
- C++学习 对string和stringstream用法认知
- string -> int 及 stringstream 用法和注意点
- Lua中string库用法二(有关于引号的处理)
- 关于String的replace的用法注意事项
- 关于Date的用法笔记(date转string,string转date)
- C++ ostringstream、istringstream、stringstream 用法浅析