2016-02-11 159 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"