您的位置:首页 > 其它

如何从一行输入的字符串中基于空格切割出单词

2017-03-01 02:46 232 查看
在C++中,可以考虑用已经写好的模板来解题:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

int main()
{
string line,word;

vector<string> s1;

getline(cin,line); // 输入一行数据

// 将一行数据绑定在一起istringstream对象上
istringstream stream(line);

while(stream >> word)
{
s1.push_back(word);
}

for(auto it = s1.begin(); it != s1.end(); it++)
{
cout << *it << " " << flush; // 将缓冲区的内容马上送进cout,并把输出缓冲区刷新
}
cout << endl;
return 0;
}


重要的是:

vector<string> str;
string line, word;
getline(cin, line); // 输入一行数据
istringstream stream(line); //绑定到istringstream对象
while(stream >> word) // 从stream流中取出单词
{
str.push_back(word);
}


这样就把输入的一行字符串切割成了单词。

如果自己手工写,需要注意的边界很细节,要很小心,如果不自己写,就用这种方法来代替,这种方法耗时不少,具体题目具体考虑吧。

基于这个方法,思考一道问题:

每个输入文件中一组数据。

分三行分别给出三条线段的长度。每行以一个整数N(1<=N<=5)开始,表示后面给出的单词个数;接下来跟着N个英文单词,每个单词表示一个数位,线段的长度由这些英文单词直接拼接而成(例如one two three代表123,one one代表11),每两个单词之间用一个空格隔开。数字0到9分别用下面十个单词表示:zero、one、two、three、four、five、six、seven、eight、nine。数据保证每条线段的长度都不为0。

如果可以组成三角形,那么输出YES;否则输出NO。

Input:
1 one
2 one one
3 one one one

Output:
NO


这个问题,并没用到上面的写法,因为命题者降低了难度,在每一行输入前都加入了一个数字,基于这个数字,就可以简单的按照一个单词一个单词输入了。

代码如下:

#include <stdio.h>
#include <iostream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

map<string,int> mp = {
{"zero",0},{"one",1},{"two",2},{"three",3},{"four",4},
{"five",5},{"six",6},{"seven",7},{"eight",8},{"nine",9}
};
int main()
{
string s;

int arr[3] = {0};
int k;

for(int i = 0; i < 3; i++)
{
cin >> k;
for(int j = 0; j < k; j++)
{
cin >> s;
arr[i] = 10 * arr[i] + mp[s];
}
}
if(arr[0] + arr[1] > arr[2] && arr[0] + arr[2] > arr[1] && arr[1] + arr[2] > arr[0])
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
return 0;
}


如果加一点点变化,问:不在每一行行首输入一个数字,直接这样输入:

one // 代表1
one one // 代表11
one one one // 代表111


那么这个问题就需要用到切割字符串的知识了。

代码如下:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <map>

using namespace std;

map<string,int> mp = {
{"zero",0},{"one",1},{"two",2},{"three",3},{"four",4},
{"five",5},{"six",6},{"seven",7},{"eight",8},{"nine",9}
};
int strToNum(vector<string> str) // 根据
{
int ans = 0;
for(int i = 0; i < str.size(); i++)
{
ans = 10 * ans + mp[str[i]];
}
return ans;
}

int main()
{
string s,word;
int arr[3] = {0};
int k;

for(int i = 0; i < 3; i++)
{
vector<string> str;
getline(cin, s);
istringstream stream(s); //绑定到istringstream对象上
while(stream >> word) // 流出单词来
{
str.push_back(word); // 加入容器备用
}
arr[i] = strToNum(str);
}

if(arr[0] + arr[1] > arr[2] && arr[0] + arr[2] > arr[1] && arr[1] + arr[2] > arr[0])
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string
相关文章推荐