你如何在C中将字母字符转换为n字符串为大写?

这就是我到目前为止所拥有的。 我只是想了解如何实现这个function。

char toupper(char s[]) { s[50] = "hello"; int i = 0; int len; len = strlen(s); while(i < len) //converting to upper until the length is reached. { s[i] = putchar(toupper(s[i])); i++; } return s[i]; } 

似乎OP想要将字符串转换为大写字母。 现在,OP在某种程度上搞砸了任务部分。 可以将代码简化为将uppercase字符分配给传递的字符串。

但是在这里,代码正在做一些编译器抱怨的事情。 invalid conversion from 'const char*' to 'char' 。 好吧,我们正在尝试将char*分配给char所以它抱怨了。 尽管思路很少,但整个代码可以简化。 我们将编写一个将字符串转换为全部大写的模块。 而已。 然后我们将用“hello”或一些字符串来测试它。

 #include #include #include void toupperString(char s[]) { size_t len = strlen(s), i = 0; while(i < len) { s[i] = toupper((unsigned char) s[i]); i++; } } int main(void) { char s[100]; strcpy(s,"hello"); // char s[100]="hello" also works; toupperString(s); printf("%s\n",s ); return 0; } 

使用你的putchar是对的。 所以这将有一个额外的function,它现在将继续打印。 (你决定它的function是否正确 - 因为除了打印它之外简单地使用它不会那么有用 - 总是打印给toupperString提供的任何东西toupperString是一个好主意)。

 void toupperString(char s[]) { size_t len = strlen(s), i = 0; while(i < len) { s[i] = toupper((unsigned char) putchar(s[i])); i++; } } 

你也有一些可疑的function。 例如它的返回值。 为什么要返回\0字符? 需要它吗? 如果答案为否,那么只需将其void返回类型,表示您没有返回任何内容。 此外,当数组衰减为指针时,char数组将被更改,您无需执行任何操作即可返回它。 因为你基本上修改了原始的字符数组。

好吧,我们可以像这样简明扼要地写出来

 char* toupperString(char *s) { char *p = s; while( *s) { *s= toupper((unsigned char) *s); ++s; } return p; } 

您当前的function具有您已经尝试实现的基本前提,但是遇到了许多问题。

首先,称之为toupper无疑会让您头疼,因为您正在使用预先存在的toupper函数实现该function。 你的函数需要获取一个字符串,然后返回修改后的字符串,但现有的toupper用于获取并返回一个char 。 从理论上讲,既然你正在修改传入的字符串,你不需要返回任何东西,但返回它不会有什么坏处。

其次,你没有明显的理由来调用putchar 。 您可以将其保留,如果需要,可以在代码的后续部分中打印更新的字符串。

第三,你返回的s[i]只是一个char并且假定i已经增加了字符串的长度将指向终止的NUL字符。

你也有假线s[50] = "hello"; 这是将传入的字符串的第51个字符设置为某个值,该值不是“hello”中的任何字符,而是字符串“hello”的内存位置的字节之一。 如果你试图声明s为“hello”,你应该在我作为例子包含的调用函数中做到这一点。

 int main(void) { char s[]="hello"; make_string_upper(s); printf("%s\n",s); } char *make_string_upper(char *s) { int i = 0; int len = strlen(s); while(i < len) //converting to upper until the length is reached. { s[i] = toupper(s[i]); i++; } return s; }