2014-10-05 3 views
0

Я преподаю обучение C++, и я пытался создать программу, которая берет строку символов и удаляет пробелы с помощью указателей. Все работает, но я хочу, чтобы он удалил количество удаленных мест. Код выглядит корректно на моих усталых глазах. У меня есть число пробелов, определяемое как пробелы. Я сам объясняю, что я пытаюсь сделать. Любая помощь будет принята с благодарностью! :)Не могу понять, почему количество пробелов не учитывается

#include <iostream> 

using namespace std; 

int stripWhite(char *str); 


int main() 
{ 
char str[100]; 
cin.getline(str, 99); // save room for the null character. 


stripWhite(str); 
cout << str << endl; 

cout << "I removed " << stripWhite(str) << " from this sentence."; 



return 0; 
} 


int stripWhite(char *str) 
{ 
char *p;  
int spaces = 0; 

for (p = str; *str != '\0'; ++str) 
{ 
    if (*str != 0x20) 
    { 
     *p++ = *str; 

    } 
    else 
    { 
     spaces++; 

    } 

} 
*p = '\0'; 

return spaces; 
} 

ответ

3

Потому что вы звоните stripWhite на вашей строке дважды (в первый раз выбрасывая номер удален), поэтому очевидно, что не будет ничего, чтобы удалить второй раз.

Вы должны вызвать его один раз и сохранить возвращаемое значение, что-то вроде:

int count = stripWhite(str); 
cout << str << endl; 

cout << "I removed " << count << " from this sentence."; 
1

Как вы уже удалили пространства, когда вы назвали stripWhite (ул) первый раз так, когда вы вызываете его снова в следующий раз ничего не удалять, поэтому каждый раз, когда вы закончите с 0 пробелами. Надеюсь, это поможет!

1

удалять ваш первый звонок stripWhite(str); для этой строки достаточно рассчитать пробелы.

cout << "I removed " << stripWhite(str) << " from this sentence."; 
Смежные вопросы