0

Hello

I have 2 functions that are just playing up. One is a function that takes in a string & should output the string backwards.
Problem: the syntax to insert a character into the string is wrong, I dont know the correct syntax.

The other is a function that takes in a string & converts each character to uppercase.
Problem: I dont know, as far as I can see, there is nothing wrong with the code, but it still outputs the string in a lowercase form, when it should be in uppercase

Any help would be greatly appreciated

Function 1:

string reverse(string s) {

	int size = (int)s.length();


	for (int i=0; i<size; i++) {
		s[i].insert( s[size-1] ); // I get an error here???
		s.erase(size);
	}
               return s;

Function 2:

string makeUpper(string s) {

	for (int i=0; i<(int)s.length(); i++) {
		if ( islower(s[i]) ) {
			toupper(s[i]);
		}
	}

	return s;
}

Code to call the functions:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int countUpper(string s); // Task 1
string reverse(string s); // Task 2
string makeUpper(string s); // Task 3

int main() {

	string b = "abcde";
	string c = "abcde";

	cout << "String b reversed = " << reverse(b) << endl;
	cout << "String b capitalised = " << makeUpper(c) << endl;

	return 0;
}
5
Contributors
4
Replies
5
Views
8 Years
Discussion Span
Last Post by firstPerson
0

First problem:

int main()
{
    string h = "abcde";
    std::reverse(h.begin(), h.end());

The problem with the second function is that the parameter is passed by value instead of by reference.

0

The first error:
s - is not a string, is a char
Second:
inserting must be into begin, not into the end, so code

s[i].insert( s[size-1] );

is fully incorrect
Third:
Function insert has many overloads, but it's no string insert(char);

Correct code

string reverse(string s)
{
	int size = (int)s.length();

	char temp[2];
	for(int i = 0; i < size; i++)
	{
		temp[0] = s[size-1]; //keep symbol from the end
		temp[1] = '\0';
		s.insert(i, string(temp)); //inserting into begin
		s.erase(size); //erase last symbol
	}
	return s;
}
0

Function 2:

the 5th line should be:
s = toupper(s);

toupper() fucntion is returning a value, it is not directly manipulating the string, so you still need to assign the current character to the returned value.

Hope it helps.

0

This might be of help. Much easier way of reversing a string.

//note using mathematical notation its  [strt,end] and not [strt,end).
//strt is included and end is included as well.

void reverseRecursivly(string& str,int strt, int end)
{
	if(strt >= end || !str[0]) return;
	
	std::swap(str[strt],str[end]);
	reverseRecursivly(str,strt+1,end-1);
}

And also your makeUpper function is wrong :

string makeUpper(string s) {

	for (int i=0; i<(int)s.length(); i++) {
		if ( islower(s[i]) ) {
			s[i] = toupper(s[i]); //Revised
		}
	}

	return s;
}
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.