2016-02-11 243 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); 
} 

此外,您在main声明s为指针数组来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"