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();

猜你喜欢

转载自blog.csdn.net/qq_41337100/article/details/85470059