问题遇到的现象和发生背景
相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了1,2,3,4,5这5个参数分别指代不同的5种字符串操作,你需要根据传入的参数,按照徐老师的规定,对输入字符串进行格式转化。
徐老师指定的操作如下:
1 表示全部转化为大写字母输出,如abC 变成 ABC
2 表示全部转换为小写字母输出,如abC变成abc
3 表示将字符串整个逆序输出,如 abc 变成 cba
4 表示将字符串中对应的大写字母转换为小写字母,而将其中的小写字母转化为大写字母输出,如 abC变成ABc
5表示将全部转换为小写字母,并将其中所有的连续子串转换为对应的缩写形式输出,比如abcD 转换为a-d,其次,-至少代表1个字母,既如果是ab,则不需要转换为缩写形式。
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
int main()
{
int n, i;
char str[201];
printf("请输入操作(1 表示全部转化为大写字母输出,如abC 变成 ABC");
printf("2 表示全部转换为小写字母输出,如abC变成abc");
printf("3 表示将字符串整个逆序输出,如 abc 变成 cba");
printf("4 表示将字符串中对应的大写字母转换为小写字母,而将其中的小写字母转化为大写字母输出,如 abC变成ABc");
printf("5表示将全部转换为小写字母,并将其中所有的连续子串转换为对应的缩写形式输出,比如abcD 转换为a - d,其次, - 至少代表1个字母,既如果是ab,则不需要转换为缩写形式。)");
scanf_s("%d", &n);
printf("请输入字符串(<200):");
scanf_s("%s", str);
printf("输出结果为:");
switch (n)
{
case 1:
for (i = 0; i < strlen(str); i++)
{
if (str[i] >= 'A'&&str[i] <= 'Z')
{
printf("%c", str[i]);
}
else
{
printf("%c", str[i] - 'a' + 65);
}
}
break;
case 2:
for (i = 0; i < strlen(str); i++)
{
if (str[i] >= 'A'&&str[i] <= 'Z')
{
printf("%c", str[i] - 'A' + 97);
}
else
{
printf("%c", str[i]);
}
}
break;
case 3:
for (i = strlen(str) - 1; i >= 0; i--)
{
printf("%c",str[i]);
}
break;
case 4:
for (i = 0; i < strlen(str); i++)
{
if (str[i] >= 'A'&&str[i] <= 'Z')
{
printf("%c", str[i] - 'A' + 97);
}
else
{
printf("%c", str[i] - 'a' + 65);
}
}
case 5:
for (i = 0; i < strlen(str); i++)
{
if (str[i] >= 'A'&&str[i] <= 'Z')
{
str[i] = str[i] - 'A' + 97;
}
}
int a[strlen(str)];
memset(a, 0, sizeof(a));
for (i = 0; i < strlen(str)-1; i++)
{
if (str[i] + 1 == str[i + 1])
{
if (i == 0)
{
continue;
}
a[i] = 1;
}
}
for (i = 0; i < strlen(str); i++)
{
if (a[i] == 0 || (a[i] == 1 && a[i - 1] == 0))
printf("%c", str[i]);
if (i >= 2 && (a[i] == 1 && a[i - 1] == 1 && a[i - 2] == 0))
{
printf("-");
}
}
default:
printf("输入错误");
break;
}
return 0;
}
运行结果及报错内容
错误 C2131 表达式的计算结果不是常数
错误 C3863 不可指定数组类型“int ['函数']”