[ Krejmer @ 06.02.2011. 15:46 ] @
Ljudi pomagajte razbiću ga.Dakle problem je u običnom konvertovanju velika u mala slova.Hoću da to odradim preko ASCII-a,ali C naravno mora mene da nanervira.

Ono standardno x=X+32 .

Moj kod:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string>
int main()
{
  //Uppercase-to-Lowercase letter convertor
  int num,i,c;
  char S[255];
  printf("INPUT STRING : \n");
  scanf("%s",&S);
  for (i=0;i<=strlen(S);i++);
  {
      if ((65>=(int)S[i]) && ((int)S[i]<=90)) 
      {
                      num=(int)S[i];
                      S[i]=(char)num+32;
      }
  }
  printf("\nOUTPUT STRING : \n");
  printf("%s\n",S);
  system("pause");
  return 0;                                    
}


Ako neko nije skontao,npr treba da bude :

ULAZ---------- IZLAZ:
LoPtA ---------- lopta


[ X Files @ 06.02.2011. 16:24 ] @
Za početak, na osnovu tvog primera, da ne idemo bas u najoptimalnija resenja ovog zadatka:

Code:

#include <stdio.h>
#include <stdlib.h>
#include <string> // <--- MISLIM DA NE TREBA
int main() // <--- C STANDARD KAZE int main(void)
{
  //Uppercase-to-Lowercase letter convertor
  int num,i,c; // <--- VIŠAK
  char S[255];
  printf("INPUT STRING : \n");
  scanf("%s",&S);
  for (i=0;i<=strlen(S);i++); // <--- NIKAKO TACKA-ZAREZ OVDE !!! TREBA DA IDE OD 0 do DUZINA-1,  TADA JE NAJBOLJE DA BUDE < UMESTO <=
  { // <--- NE TREBA BLOK
      if ((65>=(int)S[i]) && ((int)S[i]<=90)) // <--- NE TREBA CAST-OVANJE; BOLJE 'A' NEGO 65, BOLJE 'Z' NEGO 90
      {
                      num=(int)S[i]; // <--- NE TREBA CAST-OVANJE
                      S[i]=(char)num+32; // <--- NE TREBA CAST-OVANJE; MOZE KONVERZIJA ODJEDNOM SA PRETHODNIM IZRAZOM
      }
  }
  printf("\nOUTPUT STRING : \n");
  printf("%s\n",S);
  system("pause");
  return 0;                                    
}


// NETESTIRANO, NA OSNOVU TVOG PRIMERA
Code:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  //Uppercase-to-Lowercase letter convertor
  int i;
  char S[255];
  printf("INPUT STRING : \n");
  scanf("%s",&S);

  for (i=0; i<strlen(S); i++)
      if ( S[i]>='A' && S[i]<='Z')
            S[i] += 32;

  printf("\nOUTPUT STRING : \n");
  printf("%s\n",S);
  system("pause");
  return 0;
}
[ Igor Gajic @ 06.02.2011. 16:41 ] @
Zar razlika u velikim i malim slovima nije u jednom bitu. Peti bit, koliko me sluzi pamcenje. Znaci mogao bi da prodjes kroz string i uradis OR na svako slovo sa 0x20. Radi brze nego sabiranje
[ Krejmer @ 06.02.2011. 16:42 ] @
Hvala,uf grešku ovu kod for petlje nisam ni vidio.A i pogrešio sam kod znaka kod prvog uslova.Umor me stigao.

@Igor

Nije mi toliko sad važna brzina programa koliko ispravnost.

[Ovu poruku je menjao Krejmer dana 06.02.2011. u 20:10 GMT+1]
[ Mihajlo Cvetanović @ 07.02.2011. 09:24 ] @
Ispravnije bi bilo koristiti funkciju toupper. Prvo, ne bi morao da proveravaš da li je slovo malo, a drugo, tako se radi u Unicode okruženju pa valja navikavati mozak na univerzalno rešenje.
[ X Files @ 07.02.2011. 09:30 ] @
^
Slažem se... Zato i rekoh u prvoj poruci da se ne dotičem "najoptimalnijeg rešenja", već koda "as is". Ali svakako treba pomenuti i "kako treba", kada se već bavimo ovime.

btw: toupper --> tolower


Borland C++ Builder::Help::C runtime library::tolower
Code:

#include <string.h>
#include <stdio.h>
#include <ctype.h>

int main(void)
{
   int length, i;
   char *string = "THIS IS A STRING";

   length = strlen(string);
   for (i=0; i<length; i++)
   {
       string[i] = tolower(string[i]);
   }
   printf("%s\n",string);

   return 0;
}
[ Mihajlo Cvetanović @ 07.02.2011. 09:58 ] @
Ah, velika u mala... Nisam čitao.

Ali da ti se odužim, treba char string[] umesto char *string :-)
[ X Files @ 07.02.2011. 10:05 ] @
Ma da, to je Copy/Paste prepotopskog Helpa prepotopskog kompajlera, zato sam i naveo...
[ tkaranovic @ 07.02.2011. 11:20 ] @
Pogledao sam šta je u novijem helpu i stoji potpuno isti primer, a link help strane je:

ms-help://embarcadero.rs2010/rad/Tolower,_mbctolower,_towlower.html


Inače sam pogledao ovaj primer jer sam već ranije primetio da su neki drugi primeri ostali isti.

[ X Files @ 07.02.2011. 11:24 ] @
Isto:
http://docwiki.embarcadero.com.../Tolower,_mbctolower,_towlower

Inace, ko nezna, popstoji DocWiki za C++ Builder i ostale Embarcadero alate:
http://docwiki.embarcadero.com/RADStudio/en/Main_Page

[ elektro009 @ 25.02.2011. 14:15 ] @
Ev kako sam ja to uradio. I provjereno radi.
Code:

#include<stdio.h>
#include<string.h>
int uptolo(char string[])
{
    int i;
    if(!string)return 0;
    for(i=0;i<strlen(string);i++)
    {
        if(string[i]<='Z'&&string[i]>='A')
        {
            string[i]=string[i]+'a'-'A';
        }
    }
    return 1;
}
void main()
{
    char s[100];
    printf("Unesite string:\n");
    scanf("%s",s);
    uptolo(s);
    printf("%s",s);
}