我想大写指针字符串的第一个字符。
例如,输入: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;
}
此代码将整个字符串转换为大写。
答案 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
之前定义它。