C函数来大写指针字符串

时间:2016-02-11 19:35:00

标签: c function pointers

我想大写指针字符串的第一个字符。

例如,输入:john 输出:约翰

我可以用数组(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;
}

此代码将整个字符串转换为大写。

2 个答案:

答案 0 :(得分:1)

简易解决方案:

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

//Call like that:
char str[] = "test";
transform(str); //str becomes: "Test"

答案 1 :(得分: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之前定义它。