Răspuns :
Prima greseala pe care ai facut-o a fost sa declari s ca fiind string,dupa care sa verifici pozitiile acelui string (caracter)?? un caracter are doar o pozitie,fiind data de valoarea pe care i-o atribui.Deci trebuie declarat un sir de caractere : CHAR s[100] (10000 sau cat vrei ).
A doua greseala e ca nu ai contorizat nivelurile.O vale/ munte poate si mai adanca/inalt de 1 pas.Ideea e ca daca ai x pasi in jos,dupa care x pasi in sus,iar ultimul pas (adica tot un s[i]) e 'U',inseamna ca ai trecut printr-o vale si poti sa continui cu contorizatul.
#include<iostream>
#include<string.h>
using namespace std;
int countingValleys(int n,char s[])
{
int nivel=0,rez=0;
for(int i=0; i<n; i++) //parcurge toti pasii
{
if(s[i]=='U')//pasi in sus
nivel++;
if(s[i]=='D')//pasi in jos
nivel--;
if(nivel==0 && s[i]=='U')//verifica daca a facut acelasi nr de pasi in jos si sus
//si daca ultimul pas e in sus,adica daca a iesit din vale
rez++;
}
return rez;
}
int main ()
{
char s[100];
int n;
cin>>s;//
n=strlen(s);//n-nr pasilor
cout<<countingValleys(n,s);
}