在c语言中实现将小写字符串转换为大写字符串的功能
我还是一个函数和C编程的初学者。 我试图创建一个函数来将其转换为大写,但似乎我在指针处把它弄糟了(?)在c语言中实现将小写字符串转换为大写字符串的功能,c,string,function,C,String,Function,我还是一个函数和C编程的初学者。 我试图创建一个函数来将其转换为大写,但似乎我在指针处把它弄糟了(?) #包括 void mytoupper(char*s[]{ int i=0; 而(s[i]!='\0'){ 如果(s[i]>='a'&&s[i]在代码中有一些地方不能像预期的那样工作 您没有正确获取用户输入,而是试图打印一个“空”字符串 printf("%s",s); 您可以将此更改为: scanf("%31s",s); 您正在函数mytoupper中接受一个字符指针数组,但这不是必需的。
#包括
void mytoupper(char*s[]{
int i=0;
而(s[i]!='\0'){
如果(s[i]>='a'&&s[i]在代码中有一些地方不能像预期的那样工作
您没有正确获取用户输入,而是试图打印一个“空”字符串
printf("%s",s);
您可以将此更改为:
scanf("%31s",s);
您正在函数mytoupper
中接受一个字符指针数组,但这不是必需的。您只需向它传递一个字符数组即可
void mytoupper(char s[])
您正试图使用void
函数的返回值。您可以调用该函数,然后打印字符串,也可以让函数返回字符串
如果要更改字符串,然后单独打印,则需要更改mytoupper
以不再返回任何内容,并将其保留为void
返回类型
mytoupper(s);
printf("%s", s);
或将功能更改为:
char* mytoupper(char s[]) {
然后打印字符串:
printf("%s", mytoupper(s));
您的代码中存在多个问题:
mytoupper
的定义不正确:它应该采用char*s
参数,而不是char*s[]
,并返回char*
- 将字符从小写改为大写不应使用仅适用于ASCII的硬编码值
32
,请使用更通用的方法,使用s[i]=s[i]-'a'+'a';
- 要读取字符串,请使用
scanf(“%31s”,s);
而不是printf(“%s”,s);
,强烈建议测试scanf()的返回值。
printf(“%s”,mytoupper(s[32]);
中的参数不正确:您应该只编写printf(“%s”,mytoupper(s));
以下是更正的版本:
#include <stdio.h>
char *mytoupper(char *s) {
int i = 0;
while (s[i] != '\0') {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 'a' + 'A';
}
i++;
}
return s;
}
int main(void) {
char s[32];
printf("Insert string:");
if (scanf("%31s", s) == 1) {
printf("%s\n", mytoupper(s));
}
return 0;
}
#包括
char*mytoupper(char*s){
int i=0;
而(s[i]!='\0'){
如果(s[i]>=“a”和&s[i]你可能想scanf
而不是printf(“%s”,s);
在代码中输入错误:printf(“%s”,s);
到scanf(“%s”,s);
不管其他缺陷。mytoupper(s[32])
mytoupper(s)
mytoupper(s)
void mytoupper(char s[)
需要是void mytoupper(char*s)
或void mytoupper(char s[])
…并且它不应该返回任何内容。第二次破坏printf(“%s”,mytoupper(s[32]);
行。scanf(“%s”,“s”);
传递了错误的类型。删除&
,并建议使用宽度限制。scanf(“%31s”,s);
-或者更好,使用fgets()
scanf(“%s”和&s);
是错误的。如果s
是本地定义的,它可能“起作用”,但是如果s
是一个函数参数,那么s
和&s
char*s[]
不是指向数组的指针,它是一个指针数组。谢谢你的回答。当我给它空格时,它只是第一个单词的大写。为了防止它,我应该使用fgets吗?scanf
with%s
只读取一个单词。如果你想处理整行,请使用具有更大缓冲区的fgets
。如果你想处理who标准输入流内容,使用while循环,测试fgets()
:while(fgets(s,sizeof s,stdin)){fputs(mytoupper(s),stdout);}
#include <stdio.h>
char *mytoupper(char *s) {
int i = 0;
while (s[i] != '\0') {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 'a' + 'A';
}
i++;
}
return s;
}
int main(void) {
char s[32];
printf("Insert string:");
if (scanf("%31s", s) == 1) {
printf("%s\n", mytoupper(s));
}
return 0;
}