+ 1

In the following codes, program 2 works. But program 1 doesn't work. Why?

https://code.sololearn.com/c9QrdDOcoGDu/?ref=app https://code.sololearn.com/c9yh402cJrmX/?ref=app

12th Mar 2021, 6:17 AM
Jawahirullah
Jawahirullah - avatar
3 ответов
+ 3
std::string::at will never return '\0' because it will throw a runtime error if you try to access an index greater than (the length of the string - 1). In "prg 1", when `i` reaches the value of 3, the loop condition is checked a.at(3) != '\0' as 3 is greater than (a.length() - 1), that is, as the 3rd index does not exist in the string, a runtime error is thrown. To fix the program, change the loop condition to while (i < a.length()) {...} The compiler will give a warning saying that you are comparing integers of different signedness because `i` is a signed int whereas `a.length()` returns a long unsigned int. To fix that, simply change the data type of `i` to `unsigned int` or `size_t`(long unsigned int)
12th Mar 2021, 6:38 AM
XXX
XXX - avatar
+ 1
Thank u xxx. Will you pls correct this code and send it.
12th Mar 2021, 6:49 AM
Jawahirullah
Jawahirullah - avatar
+ 1
Also, why are including <string.h>, it is a C library. You need to include <string>. https://code.sololearn.com/ckul1mADzOmP/?ref=app
12th Mar 2021, 6:58 AM
XXX
XXX - avatar