Разграничаване на string-ове от getline. Memory Management Homework
Здравейте,
Извинявам се предварително ако въпроса ми е прекалено елементарен, но наистина не мога да го направя това. А именно да отделя различните string-ове веднъж след като съм прочела някакъв текст от конзолата. Трябва да мина през всяка дума, за да променя или проверя нещо в упражнения 5,6 и 7.
Знам че за getline може да се зададе опция да взема до определен символ. Но в случая това което ме обърква е, че не е един символа, който разделя думите. Може да е празно място, може да е тире, може да е запетя, може да е скоба и тн.
Как се прави така че всички тези символи да бъдат отчетени като разграничения между думите?
Камелия
Благодаря ти за отговора!
Имам още един въпрос за задача 5. Защо toupper не се задейства като е в функцията? Нещо не правя както трябва сигурно. Пробвах го в main и си работи, но в makeTitleCases не ми се получава:
#include<iostream>
#include <string>
using namespace std;
void makeTitleCase(string& text);
int main()
{
cout << "Please enter a line of text:" << endl;
string inputLine;
getline(cin, inputLine);
makeTitleCase(inputLine);
cout << inputLine << endl;
return 0;
}
void makeTitleCase(string& text)
{
for(int i=0; i<text.length(); i++){
if(text[i] == ' ' || text[i]== ','){
toupper(text[i+1]);
}
}
return;
}
Провери го как е дефиниран и описан тук: http://www.cplusplus.com/reference/cctype/toupper/
Забележи, че не приема референция към променлива, а взема стойност и връща стойност :)
Това означава, че ако имаш char letter = 'a'; toupper(letter) няма да направи нищо директно. Но ако имаш char letter = 'a'; char uppercaseLetter = toupper(a) вече е друго нещо. Също както abs(-5) няма да промени -5 на 5, а ще ти върне ново число, което е абсолютната стойност, така и toupper връща стойност вместо да променя това, което си му подала. http://www.cplusplus.com/ is your friend за всякакви такива неща
text[i+1]=toupper(text[i+1]);
Така ще работи обаче не работи за първата буква.
Освен интервал и "," има още доста неща " ' ? ....12345 и т.н.
Може да използваш isalpha().