1. 程式人生 > >C++字串和字元的分割與轉換

C++字串和字元的分割與轉換

今日一些小見解。

  • //未初始化錯誤
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();