C++中对string进行分割,寻找,长度等处理

在写C++的过程中,有的时候必须要对用户的输入进行一些处理,用户所输入的string, 可能包含了数字,单词。然而电脑只认为输入的是一串字符而已。

所以,在实战过程中,处理用户输入是很重要的。

我们既然要对string做处理,当然是要先包含了这个强大的string模块:#include <string>

using std::string; //告诉电脑我要用string

假设用户输入一个命令+空格后+第一个数字+空格+第二个数字,我们需要两个String形式的变量,一个是源输入,一个是处理后的命令string. 之后我们需要几个double或者float变量给用户所输入的数字。这边还多了一个strnum,是为了处理尚未转换成double的只包含数字的字符串用的。如果内存紧张可以直接不用。

string command, str,strnum;
double argument1, argument2, answer;
getline(cin, str);

如果要处理源输入str,必须使用getline(), 使用cin在后续就不好操作了。

int index = 0;//整数型index,用来找第一个空格
int index2 = 0;//整数型index2,用来找第二个空格

接下来就要用到string库中的find功能了。index是找到的空格的排序数字位置。比如说这句话:“hello world”,空格就在第六个,那么str.find会返回6。如果没有空格,就返回-1.
index = str.find(” “,0);
现在又要提到我们的substr功能,这是一个很好的分割字符串的工具。其实在一个字符串里截取字符方法有很多种,substr就是其中的一种而已。它的用法就是截取从第n个字母到第m种字母的字符。在以下代码中, n就是0,代表第一个字母,m就是我们上面获得的index代表空格在第几位, command = str.substr(0, index);

下面其实是一样的操作,指定从第一个空格到字符结尾都是我们要的数字。确定字符所有字母数是用length函数,非常简明的,调用它就会回归字符的长度。再就是说这个strnum可能会有两个数字,所以我们再在这个字符串里找一下有没有空格。这个方法只适用于小数量的数字上。
strnum = str.substr(index + 1, str.length());
index2 = strnum.find(” “, 0);

后面的话,我们都需要在strnum这个字符串里处理了,简单来说就是从数字的先后位置来指定数字顺序。空格前为第一个数字,空格后是第二个。这里我用了个套娃,先运行分割,再使用stod把字符转换为数字。stod应该来自“string to double”, 我记得还有stoi:”string to int”,之后还有很多,这些转换的功能,还是挺方便的。

argument1 = stod(strnum.substr(0, index2));
argument2=stod(strnum.substr(index2+1,strnum.length())

暂时就写这么多,要是有意思以后再补充。

纯粹瞎玩

Leave a Reply

Your email address will not be published. Required fields are marked *