2017-02-10 3 views
-1

Мне нужно подсчитать слова в строковой переменной, посчитав пробелы. Также мне нужно подсчитывать предложения, подсчитывая точки. Я использую функцию-член в(), чтобы получить символ и сравнить его, но по какой-то причине мой компилятор Xcode не позволит мне это сделать. вот мой файл заголовка:Как подсчитать пробелы в строковой переменной

#ifndef SPEECHANALYST_H 
#define SPEECHANALYST_H 

#include <stdio.h> 
#include <iostream> 
#include <string> 
using namespace std; 

namespace marina 
{ 
class SpeechAnalyst : public string 
{ 
public: 
SpeechAnalyst() : std::string() 
{}; 
void clear(); // resets everything... 
void addData(char * stuff); 
void addStringData(std::string stuff); 

int getNumberOfWords() const; 
int getNumberOfSentences() const; 

friend ostream& operator << (ostream& outs, const SpeechAnalyst & sa); //   prints the data seen so far! 

private: 
std::string myData; 


}; 
} 
#endif /* SpeechAnalyst_h */ 

И это мой файл реализации:

#include "SpeechAnalyst.h" 
#include <stdio.h> 
#include <iostream> 
#include <string> 
using namespace std; 


namespace marina 
{ 
    void SpeechAnalyst::clear() 
    { 
    myData.clear(); 
    } 



    void SpeechAnalyst::addStringData(std::string stuff) 
    { 
     myData += stuff; 

    } 

    void SpeechAnalyst::addData(char * stuff) 
    { 
    string line; 
    line=stuff; 
    myData += line; 
    } 

    int SpeechAnalyst::getNumberOfWords() const 
    { 
    int i,words=0,sentence=0; 
    for (i=0; i<myData.length(); ++i) 
     { 
     if (myData.at(i) == " ") 
      words++; 
     } 
     return words; 
    } 


    } 

Так ошибки, что компилятор видит являются: 1) Результат сравнения с строкового литерала не определен (использование strncmp вместо этого) 2) Сравнение между указателем и целого числа ('INT' и 'Const символ *')

Оба ошибки находятся на линии "если (myData.at (я) ==" ")"

+1

Что делать, если рядом друг с другом присутствуют два или более символа пробела? Счетные пространства - это плохой способ подсчета количества слов. Почему бы просто не подсчитать количество слов? – PaulMcKenzie

+0

Это задание, и мой профессор явно попросил использовать пробелы и точки @PaulMcKenzie – Marina

+0

Это действительно не отвечает на мой вопрос. Что делать, если между словами есть два или более пробелов? Что делать, если данные «Joe [sp] [sp] [sp] Smith'? Сколько слов есть? 3? – PaulMcKenzie

ответ

0
int number_of_spaces = 0; 
int number_of_dots = 0; 
for (auto& iter : input_text) 
{ 
    if (iter == ' ') 
    { 
     number_of_spaces++; 
    } 
    else if (iter == '.') 
    { 
     number_of_dots++; 
    } 
} 

Этот код подсчитывает количество пробелов и точек. Он не считается как новая строка или возврат каретки.

1

Я не думаю, что вы далеко от своего собственного решения.

Попробуйте это:

if (myData.at(i) == ' ') 

Вместо твоего:

if (myData.at(i) == " ") 

С "" вы создаете массив символов против '', который создает один символ.