在这段代码中,我试图从用户那里获取一个字符串,并将大写字母放入另一个数组中,然后打印它。但我知道我做了一些严重错误的事情,有人可以帮助我处理这段代码吗?
#include<string.h>
int main() {
char arr[100],uppercaseletters[50];
printf("Enter array:");
scanf("%s",arr);
strlen(arr);
printf("The lenght of string is: %d\n",strlen(arr));
for(int i=0;i<=strlen(arr);i++){
if(arr[i]>='A' && arr[i]<='Z'){
arr[i]+=uppercaseletters[50];
printf("%s",uppercaseletters);
}
}
}
最佳答案
对于根据 C 标准的初学者,不带参数的函数 main 应声明为
int main( void )
尚不清楚为什么数组 uppercaseletters
的元素少于数组 arr
的元素。
char arr[100],uppercaseletters[50];
用户可以输入仅由大写字符组成的字符串。
本声明
strlen(arr);
没有效果。
本声明
arr[i]+=uppercaseletters[50];
没有意义。您必须填充数组uppercaseletters
。此外,元素 uppercaseletters[50]
不存在,因为索引的有效范围是 [0, 50)
。
在此声明中
printf("%s",uppercaseletters);
您正在尝试输出未初始化的数组。
该程序可以如下所示。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
enum { N = 100 };
char s[N];
printf( "Enter a string: " );
fgets( s, sizeof( s ), stdin );
size_t n = 0;
for ( size_t i = 0; s[i] != '\0'; i++ )
{
if ( isupper( ( unsigned char )s[i] ) ) ++n;
}
char *upper_case_letters = malloc( n + 1 );
n = 0;
for ( size_t i = 0; s[i] != '\0'; i++ )
{
if ( isupper( ( unsigned char )s[i] ) )
{
upper_case_letters[n++] = s[i];
}
}
upper_case_letters[n] = '\0';
puts( upper_case_letters );
free( upper_case_letters );
return 0;
}
程序输出可能类似于
Enter a string: Hello World!
HW
如果不动态分配大写字母数组,程序可以如下所示。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
enum { N = 100 };
char s[N];
char upper_case_letters[N];
printf( "Enter a string: " );
fgets( s, sizeof( s ), stdin );
size_t n = 0;
for ( size_t i = 0; s[i] != '\0'; i++ )
{
if ( isupper( ( unsigned char )s[i] ) )
{
upper_case_letters[n++] = s[i];
}
}
upper_case_letters[n] = '\0';
puts( upper_case_letters );
return 0;
}
关于c - 将从用户处获取的大写字母放入数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59851390/