今日一些小见解。
- //未初始化错误
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();