Hi I'm trying to make a program that returns the number of letters in a string but it seems that the function I have is not working as it returns 0 every time. Can someone check what I'm doing wrong? Thanks in advanced.

#include<iostream>
#include<string>
using namespace std;

unsigned letters(const string a);

int main(){
	int i;
	string a;
	cin >> a;
	cout << letters(a);
	system("pause");
}


unsigned letters(const string a){
	int i;
	int countL = 0;
	for(i=0;a[i]!='\0';i++){		
		if (a[i] >= 'A' && a[i] <='Z' && a[i] >= 'a' && a[i] <= 'z')
			countL++;
}
	return countL;
}

std::string s don't (EDIT: necessarily) end in '\0' so you have to check and see if you've exceeded the length (which is accessed by the string object's .length() method)

Edited 5 Years Ago by jonsca: n/a

Should the function definition have a type?

Edited 5 Years Ago by seanbp: grammar

Should the function definition have a type?

unsigned is a type, unless I'm misunderstanding your question...

The int is implied. Don't remember reading that. If there's no null terminator wouldn't the code run an infinite loop? bookmark says it returns.

for (i = 0; i < a.length(); i++) 
if ((a[i] >= 'A' && a[i] <= 'Z') || (a[i] >= 'a' && a[i] <= 'z'))

:)

Edited 5 Years Ago by seanbp: forgot one line

for (i = 0; i < a.length(); i++) 
if ((a[i] >= 'A' && a[i] <= 'Z') || (a[i] >= 'a' && a[i] <= 'z'))

:)

Good catch, I hadn't gotten that far yet, though you should at least give him/her the means to figure out why the logic was wrong.

Edited 5 Years Ago by jonsca: n/a

This article has been dead for over six months. Start a new discussion instead.