如何在 c 中对 char 数组进行优化?
How to toupper char array in c?
这里有什么问题吗?
我想检查char数组中的字符是否小写,如果是小写就应该改成大写。
#include <stdio.h>
int main(int argc, char *argv[]) {
char arr[100];
scanf("%s",&arr);
for(int i=0;i<sizeof(arr);i++){
if(int islower(arr[i])){
arr[i] = toupper(arr[i]);
}
}
printf("%s",arr);
return 0;
}
添加声明 islower
和 toupper
的 header。
#include <ctype.h>
此外,
if(int islower(arr[i])){
不对。删除 int
.
if(islower(arr[i])){
您缺少包含 #include <ctype.h>
此外,您不需要 if
声明。 toupper
会在内部处理(如果您真的想保留 islower
,请删除 if
语句中的 int
)。
这里有什么问题吗?
行:if(int islower(arr[i])){
因表达式错误而无法编译。
更改为:if(islower(arr[i])){
并且在您的代码的这一行中,可能超出了应有的范围:
for(int i=0;i<sizeof(arr);i++){
您可能正在查看 space 字符串终止符之后的内容:
|s|t|r|i|n|g|[=11=]|<unknown contents here, part of your legal memory, but are not part of the string>
它应该是:
int len = strlen(arr);
for(int i=0;i<len;i++){
要正确测量字符串的长度,请使用 strlen
,而不是 sizeof
for(int i=0;i<strlen(arr);i++){ // Don't use sizeof on this line
这是一个更简单的版本:
#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
char arr[100];
scanf("%s", arr);
for(int i=0;i<strlen(arr);i++){
arr[i] = toupper(arr[i]);
}
printf("%s",arr);
return 0;
}
甚至:
#include <stdio.h>
#include <ctype.h>
int main(void) {
char arr[100];
scanf("%s", arr);
for(char* c=arr; *c=toupper(*c); ++c) ;
printf("%s",arr);
return 0;
}
这里有什么问题吗?
我想检查char数组中的字符是否小写,如果是小写就应该改成大写。
#include <stdio.h>
int main(int argc, char *argv[]) {
char arr[100];
scanf("%s",&arr);
for(int i=0;i<sizeof(arr);i++){
if(int islower(arr[i])){
arr[i] = toupper(arr[i]);
}
}
printf("%s",arr);
return 0;
}
添加声明 islower
和 toupper
的 header。
#include <ctype.h>
此外,
if(int islower(arr[i])){
不对。删除 int
.
if(islower(arr[i])){
您缺少包含 #include <ctype.h>
此外,您不需要 if
声明。 toupper
会在内部处理(如果您真的想保留 islower
,请删除 if
语句中的 int
)。
这里有什么问题吗?
行:if(int islower(arr[i])){
因表达式错误而无法编译。
更改为:if(islower(arr[i])){
并且在您的代码的这一行中,可能超出了应有的范围:
for(int i=0;i<sizeof(arr);i++){
您可能正在查看 space 字符串终止符之后的内容:
|s|t|r|i|n|g|[=11=]|<unknown contents here, part of your legal memory, but are not part of the string>
它应该是:
int len = strlen(arr);
for(int i=0;i<len;i++){
要正确测量字符串的长度,请使用 strlen
,而不是 sizeof
for(int i=0;i<strlen(arr);i++){ // Don't use sizeof on this line
这是一个更简单的版本:
#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
char arr[100];
scanf("%s", arr);
for(int i=0;i<strlen(arr);i++){
arr[i] = toupper(arr[i]);
}
printf("%s",arr);
return 0;
}
甚至:
#include <stdio.h>
#include <ctype.h>
int main(void) {
char arr[100];
scanf("%s", arr);
for(char* c=arr; *c=toupper(*c); ++c) ;
printf("%s",arr);
return 0;
}