2013-04-26 3 views
0

У меня возникают проблемы Разбиение строки с использованием чистого C++Split Строка с использованием C++

Строка всегда выглядит следующим образом

12344//1238 

Первый междунар затем //, а затем второй Int.

Нужна помощь, чтобы получить два Int значения и игнорировать //

+0

Какие проблемы? Возможно, вам захочется взглянуть на первую связанную ссылку справа. – chris

+0

Я не знаю, как разбить строку, чтобы получить два int и игнорировать // – glethien

+0

, что вы пытаетесь сделать со строкой? любой код? –

ответ

1
string org = "12344//1238"; 

size_t p = org.find("//"); 
string str2 = org.substr(0,p); 
string str3 = org.substr(p+2,org.size()); 

cout << str2 << " "<< str3; 
+0

Кажется, лучше определить разделитель как строку. Затем сделайте 'p + sep.size()' вместо (хрупкого) 'p + 2'. – Madbreaks

+0

Спасибо, что работал очень хорошо! Он сделал трюк !!!! – glethien

+0

@Madbreaks Я сделал это, потому что OP сказал, что строка всегда в этом формате. Просто чтобы все было просто. – stardust

0

Посмотрите на strtok функции

+0

Я не возражаю против того, чтобы спуститься вниз, но, пожалуйста, расскажите, почему – Madbreaks

+0

Это может быть больше C, чем C++, и может быть небезопасным потоком, но оно * делает * разделение строк. – chris

+0

Спасибо @chris, я согласен с более стандартным C. Но так как C++ является надмножеством C, это вполне законно использовать. – Madbreaks

0

Это должно Разделить и преобразовать в целые числа:

#include <iostream> 
#include <sstream> 
#include <string> 
#include <stdexcept> 

class BadConversion : public std::runtime_error { 
public: 
    BadConversion(std::string const& s) 
    : std::runtime_error(s) 
    { } 
}; 

inline double convertToInt(std::string const& s, 
           bool failIfLeftoverChars = true) 
{ 
    std::istringstream i(s); 
    int x; 
    char c; 
    if (!(i >> x) || (failIfLeftoverChars && i.get(c))) 
    throw BadConversion("convertToInt(\"" + s + "\")"); 
    return x; 
} 

int main() 
{ 
    std::string pieces = "12344//1238"; 

    unsigned pos; 
    pos = pieces.find("//"); 
    std::string first = pieces.substr(0, pos); 
    std::string second = pieces.substr(pos + 2); 
    std::cout << "first: " << first << " second " << second << std::endl; 
    double d1 = convertToInt(first), d2 = convertToInt(second) ; 
    std::cout << d1 << " " << d2 << std::endl ; 
} 
+0

Что это ..? – Madbreaks

0

Проще всего я могу думать:

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

using namespace std; 

void main() 
{ 
int int1, int2; 
char slash1, slash2; 

//HERE IT IS: 
stringstream os ("12344//1238"); 
os>> int1 >> slash1 >> slash2 >> int2; 
//You may want to verify that slash1 and slash2 really are /'s 

cout << "I just read in " << int1 << " and " << int2 << ".\n"; 

system ("pause"); 
} 

Также приятно, потому что так легко переписать - если, скажем, вы решили читать в ints, ограниченном чем-то другим.

1

Почему мы не используем sscanf?

char os[20]={"12344//1238"}; 
int a,b; 
sscanf(os,"%d//%d",a,b); 

Reference

0

Возьмите целые числа в виде строки. Строка будет иметь номера и символы //. Далее вы можете запустить простой цикл для поиска «/» в строке. Значения перед символом сохраняются в другой строке. Когда появится '/', цикл for завершится. Теперь у вас есть индекс первого символа '/'. Увеличьте индекс и скопируйте остальную часть строки, используя цикл anothe for, в другой строке . Теперь у вас есть две отдельные строки.

Смежные вопросы