2014-11-16 3 views
0

У меня есть .txt файл, который выглядит следующим образом ...Удаление символов из C-Style строки C++

City- Madrid 
Colour- Red 
Food- Tapas 
Language 
Rating 

В принципе, я хочу, чтобы добавить все до - или конца строки (пробелов) в один массив и все после второго массива.

Мой код добавляет все до - или whitespace в один массив, но не все остальные.

{ 
    char** city; 
    char** other; 
    city = new *char[5]; 
    other = new *char[5]; 
    for (int i=0; i<5; i++){ 
     city = new char[95]; 
     other = new char[95]; 
     getline(cityname, sizeof(cityname)); 
     for(int j=0; j<95; j++){ 
     if(city[j] == '-'){ 
      city[j] = city[95-j]; 
     } 
     else{ 
      other[j] = city[j]; // Does not add the everything after - character 
     } 
     } 
} 

Было бы очень признательно, если бы кто-то помог мне с выражением else.

+0

Ни один из этих '' новых '' 's необходим. Я бы сказал вам, если вы пропустите память, но этот код не будет компилироваться. –

ответ

2

Если вы собираетесь писать код на C++, проще всего использовать std::string. Таким образом:

std::string line; 
std::getline(file, line); 
size_t hyphen = line.find('-'); 
if (hyphen != std::string::npos) { 
    std::string key = line.substr(0, hyphen); 
    std::string value = line.substr(hyphen + 1); 
} 
else { 
    // use all of line 
} 

Если вы хотите придерживаться строк C-стиле, то вы должны использовать strchr:

getline(buffer, sizeof(buffer)); 
char* hyphen = strchr(buffer, hyphen); 
if (hyphen) { 
    // need key and value to be initialized somewhere 
    // can't just assign into key since it'll be the whole string 
    memcpy(key, buffer, hyphen); 
    strcpy(value, hyphen + 1); 
} 
else { 
    // use all of buffer 
} 

Но на самом деле предпочитают std::string.

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