2016-02-11 3 views
-3

Я хочу использовать первый символ строки указателя.Функция C для заглавной буквы первого символа строки указателя

Например, вход: джон Выход: Джон

я могу сделать это с массивами (s[0] = toUpper(s[0]), но есть способ сделать это с указателями?

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#define MAX 30 

int transform(char *s) 

{ 
    while (*s != '\0') 
    { 
     *s = toupper(*s); 
     s++; 
    } 

    return *s; 
} 

int main() 
{ 
    printf("String: "); 
    char *s[MAX]; 


    getline(&s,MAX); 

    transform(s); 
    printf("Transformed char: %s", &s); 

} 

int getline(char *s, int lim) 
{ 
    int c; 
    char *t=s; 
    while (--lim>0 && (c=getchar())!=EOF && c!='\n') *s++=c; 
    *s='\0'; 
    while (c!=EOF && c!='\n') 
     c=getchar(); 
    return s-t; 
} 

Этот код превращает всю строку в верхний регистр.

+1

Почему вы перебираете указатель на один символ? – Jacobr365

ответ

1

Ваша transform функция зацикливания через всю строку и работает toupper на каждом из них. Просто запустите его на первый символ:

void transform(char *s) 
{ 
    *s = toupper(*s); 
} 

Кроме того, вы объявляете s в main как массив указателей на char. Вы просто хотите, массив char:

int main() 
{ 
    printf("String: "); 
    char s[MAX]; 


    getline(s,MAX);  // don't take the address of s here 

    transform(s); 
    printf("Transformed char: %s", s); // or here 

} 

Вы хотите переместить main в конец файла, а также, так что getline определяется, прежде чем он называется.

1

Простое решение:

void transform(char* p) { 
    //Only first character 
    *p = toupper(*p); 
} 

//Call like that: 
char str[] = "test"; 
transform(str); //str becomes: "Test" 
Смежные вопросы