2015-09-20 54 views
3

我正在学习C++,一本书,而且我被困在练习中。我应该将一个字符串拆分为两部分,每部分由一个空格分隔,然后忘记其余部分,但由于某些原因,我的代码不会忘记其余部分。C++分裂一个字符串

#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

int main(){ 

string original; 
string first; 
string second; 

bool firstDone = false; 
bool secondDone = false; 

int firstSpace = 0; 
int secondSpace = 0; 

cout << "Enter string: "; 

getline(cin, original); 

cout << "The original string is: " << original << endl; 

for(int i = 0; i < original.length(); i++) 
{ 
    if(original[i] == ' ' && !firstDone){ 
     firstSpace = i; 
     firstDone = true; 
    } 
    else if(original[i] == ' ' && !secondDone){ 
     secondSpace = i;  
     secondDone = true; 
    } 
} 

cout << "The first space is at: " << firstSpace << endl << "The second space is at: " 
    << secondSpace << endl; 

first = original.substr(0, firstSpace); 
second = original.substr(firstSpace + 1, secondSpace); 

cout << "The first string is: " << first << endl << "The second string is: " 
    << second << endl; 

return 0; 

} 

当我运行它,我得到

输入字符串:TEST1 TEST2 TEST3

原始字符串:TEST1 TEST2 TEST3

第一个空间是:5

第二空间是于:11

第一个字符串是:test1的

第二个字符串是:TEST2 TEST3

,正如你所看到的第二个字符串为“TEST2 TEST3”时,它应该只是“测试2”。有人能指出我做错了什么吗?

p.s.我在书中并不是很远,我在网上找到的许多其他解决方案都有一堆我不熟悉的变量和其他函数,所以我们可以将答案限制为我使用过的样式(如果可能)。

回答

2

其实substr()第二个参数是从第一个参数中提到的起始偏移量开始的字符串长度。做如下:

second = original.substr(firstSpace + 1, secondSpace-(firstSpace+1)); 
+0

哦第二个参数是长度,而不仅仅是终点?这现在更有意义了,非常感谢。 –