Sprawdzanie długości string.

0

Nie potrafię zrozumieć dlaczego ten zapis nie działa. Dla M = 54. Po sprawdzaniu w Internecie taki zapis powinien działać, (Jeśli zamiast lenght jest size(), też nie działa)

string D;
D=M;
cout << D.lenght();

2

Jeśli jest tak, jak piszesz (a piszesz, niestety, nader nieczytelnie), to próbujesz przypisać stringowi D wartość inta M, co jest niedozwoloną operacją w C++ — o czym Cię poinformował kompilator.

Jak chcesz przerobić liczbę 54 na stringa z zawartością "54", to służy do tego funkcja to_string.

A tak w ogóle, to to brzmi jak problem XY, ale to już inna historia…

3

Gdybyś jednak to zechciał skompilować, to byś zobaczył, że kompilator podpowiada, że zrobiłeś literówkę:

prog.cc: In function 'int main()':
prog.cc:7:15: error: 'std::string' {aka 'class std::__cxx11::basic_string<char>'} has no member named 'lenght'; did you mean 'length'?
    7 |     cout << D.lenght();
      |               ^~~~~~
      |               length

https://wandbox.org/permlink/CL0H62N5FfZF9Zlz

1

http://www.cplusplus.com/reference/string/string/operator=/ podaje następujące przeładowania operatora = dla std::string:

(1) string& operator= (const string& str);	
(2) string& operator= (const char* s);
(3) string& operator= (char c);
(4) string& operator= (initializer_list<char> il);
(5) string& operator= (string&& str) noexcept;

W tym przypadku wszystko kompiluje się poprawnie, bo ze wszystkich przeładowanych operatorów, jeden jest poprawny w odniesieniu do inta, tzn. użyte jest przeładowanie nr (3) po niejawnej konwersji inta na chara.
Przeładowanie nr (3) jest natomiast zdefiniowane jak poniżej. To powinno rozwiać wszelkie wątpliwości:

The string value is set to a single copy of this character (the string length becomes 1)

Kompilator powinien ci rzucić warningiem o niejawnej konwersji. Warto je czytać :-)
A do przypisania liczby do stringa musisz ją najpierw przekonwertować używając std::to_string:

D=std::to_string(M);

1 użytkowników online, w tym zalogowanych: 0, gości: 1