我正在为即将到来的考试做练习题,但似乎无法弄清楚目标是什么:
编写一个 C 程序来读取两个字符串 s1
和 s2
。每个字符串的最大长度为 25。形成两个新字符串,分别称为 upper
和 lower
。 Lower 由 s1
和 s2
的小写字母连接而成,而 upper
包含两个字符串的大写字母的连接。
s1: GREENblue
s2: busCAR
输出:
upper: GREENCAR
lower: bluebus
我已经尝试了几天,但未能完全弄清楚。
这是我到目前为止所拥有的:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>
int main()
{
int i, j;
char s1[25];
char s2[25];
char upper[25];
char lower[25];
printf ("Please enter first string: ");
scanf ("%s", &s1);
printf ("Please enter second string: ");
scanf ("%s", &s2);
strcat (s1, s2);
for (i=0; i<strlen(s1); i++)
{
if (s1[i]>=65 && s1[i] <= 90)
{
upper[i] = s1[i];
}
else
{
lower[i] = s1[i];
}
}
printf ("Upper: %s\n", upper);
printf ("Lower: %s\n", lower);
}
最佳答案
在您的代码中,使用strcat()
strcat (s1, s2);
s1
可能没有足够的内存来保存连接的字符串。在这种情况下,它会调用 undefined behaviour .
从手册页,
If
dest
is not large enough, program behavior is unpredictable; buffer overruns are a favorite avenue for attacking secure programs.
按照您的要求
The maximum size of each string is 25
您需要一个长度为 25 X 2(对于 char
)+ 1(对于 null)的目标缓冲区。
此外,它还表明,您需要 s1
和 s2
各有 26
元素来容纳 null。
根据您的要求,您的程序需要进行某些设计更改,例如
您需要
<s1
和s2
各有26
个元素来容纳 null。upper
和lower
两者的大小都必须等于输入大小的总和。想象一下如果s1
和s2
都完全大写(或小写)的情况。因此,您需要upper[51]
和lower[51]
。
关于在c中连接两个单独字符串的大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30892020/