C++字串和字元的分割與轉換
阿新 • • 發佈:2019-01-03
今日一些小見解。
- //未初始化錯誤
string a;
a[0]='1';
- //未初始化錯誤
string *q;
q[0]="a";
- 想單獨為未初始化的string逐個增加元素:
string str;
str.pushback("a");
- char與string不能直接轉換,但是string[i]的型別就是char
const char* 和char* 之間不能直接轉換。
const char* p="abcde";
這樣的指標就是指向常量的指標,不能通過指標來修改它所指向的資料.。
因此從string轉換的指標也是指向常量的指標。
string str=“world”;
const char *cp = str.c_str();//同上,要加const或者等號右邊用char*
否則,在呼叫函式的時候,會顯示*const char 和char 之間不相容***
因此,二者轉換需要一個過渡。
const char* cp = "world";
char* p = new char[100];
strcpy(p, cp);
cout << p << endl;
這樣就可以通過p來改變原來’‘abcde’'的值了.
由此,string也轉變成了char* 。
- 今日任務是
-
根據昨天的經驗,我先單行讀入,再分離空行
#include<iostream>
#include<string>
#include <sstream>
using namespace std;
int main()
{
string buffer;
getline(cin, buffer);
stringstream ss(buffer);
string str;
while (ss >> str)
{
...程式主體。
}
return 0;
}
之後需要處理的就是對string類的str進行能否轉換成數字,或者是符號就變成char的轉換。
注意這裡是可以直接str[0]這麼用的。
由此對字串的輸入處理就完成啦!
順便放一個昨天從文字讀入行的對比,真的太像啦。只是多了一個開啟檔案後,讓檔案連線流,在呼叫getline那裡是連結,而從緩衝區讀入的話,直接就是cin了!
string fileName = "retail.dat";
ifstream in;
in.open(fileName.data(), ios::in); //將檔案流物件與檔案連線起來
assert(in.is_open());//如果開啟失敗,這裡會終止執行
string buffer;
while (getline(in, buffer))//一次讀取檔案的一行內容,含空格,為buffer的字串
{
int temp;
stringstream ss(buffer); //建立stringstream物件,初始化流內容為buffer所代表的字串
while (ss >> temp) //從buffer中一次次讀取數字存入temp,直到到達字串流的末尾
{
...對ss進行操作
}
}
in.close();