相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了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
#include
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 ['函数']”
不用那么复杂,我简单修改了下,你试试看。。。
#include <stdio.h>
#include <string.h>
int main()
{
int n, i, j, k;
char t;
char str[201] = {0};
printf("请输入操作:\n");
printf("1 表示全部转化为大写字母输出,如abC 变成 ABC\n");
printf("2 表示全部转换为小写字母输出,如abC变成abc\n");
printf("3 表示将字符串整个逆序输出,如 abc 变成 cba\n");
printf("4 表示将字符串中对应的大写字母转换为小写字母,而将其中的小写字母转化为大写字母输出,如 abC变成ABc\n");
printf("5 表示将全部转换为小写字母,并将其中所有的连续子串转换为对应的缩写形式输出,比如abcD 转换为a - d,其次, - 至少代表1个字母,既如果是ab,则不需要转换为缩写形式。)\n");
scanf("%d", &n);
printf("请输入字符串(<200):");
scanf("%s", str);
int len = strlen(str);
switch (n)
{
case 1:
for (i = 0; i < len; i++)
{
if (str[i] >= 'a'&& str[i] <= 'z')
{
str[i] -= 32;
}
}
break;
case 2:
for (i = 0; i < len; i++)
{
if (str[i] >= 'A'&&str[i] <= 'Z')
{
str[i] += 32;
}
}
break;
case 3:
for (i = 0; i < len/2; i++)
{
t = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = t;
}
break;
case 4:
for (i = 0; i < len; i++)
{
if (str[i] >= 'A'&&str[i] <= 'Z')
{
str[i] += 32;
}
else if (str[i] >= 'a'&&str[i] <= 'z')
{
str[i] -= 32;
}
}
break;
case 5:
for (i = 0; i < len; i++)
{
if (str[i] >= 'A'&&str[i] <= 'Z')
{
str[i] += 32;
}
}
for (i = 0, k = 0; i < len;) {
str[k++] = str[i];
for (j = i+1, t = 0; j < len; j++) {
if (str[j] - str[i] == j - i) {
t++;
} else if (t > 1) {
str[k++] = '-';
str[k++] = str[j - 1];
i = j;
t = 0;
break;
} else {
i = j;
t = 0;
break;
}
}
if (t > 1) {
i = j;
str[k++] = '-';
str[k++] = str[len - 1];
}
}
str[k++] = '\0';
break;
default:
printf("输入错误\n");
break;
}
printf("输入结果: %s\n", str);
return 0;
}
71 行int a[strlen(str)]; 写错了,定义数组时尺寸是不能用变量的,strlen()相当于调用了函数,所以也报出了不能指定数组类型“int ['函数']”的错误。如果想要用变量定义数组长度可以把代码改成如下:
int len = str.size();
int *a = new int[len];
修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n, i, k, j = -1;
char str[201], tmp[400];
printf("请输入操作(1: 表示全部转化为大写字母输出,如abC 变成 ABC\n");
printf("2: 表示全部转换为小写字母输出,如abC变成abc\n");
printf("3: 表示将字符串整个逆序输出,如 abc 变成 cba\n");
printf("4: 表示将字符串中对应的大写字母转换为小写字母,\n"
"而将其中的小写字母转化为大写字母输出,如 abC变成ABc\n");
printf("5: 表示将全部转换为小写字母,并将其中所有的连续子串转换为\n"
"对应的缩写形式输出,比如abcD 转换为a - d,其次,\n"
"- 至少代表1个字母,既如果是ab,则不需要转换为缩写形式。)\n");
scanf_s("%d", &n);
printf("请输入字符串(<200):");
scanf_s("%[^\n]", str, 201);
printf("输出结果为:");
switch (n)
{
case 1:
for (i = 0; i < (int)strlen(str); i++)
{
if (str[i] >= 'a' && str[i] <= 'z')
str[i] = str[i] - 'a' + 65;
printf("%c", str[i]);
}
break;
case 2:
for (i = 0; i < (int)strlen(str); i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] = str[i] - 'A' + 97;
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 < (int)strlen(str); i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] = str[i] - 'A' + 97;
else
str[i] = str[i] - 'a' + 65;
printf("%c", str[i]);
}
break;
case 5:
for (i = 0; str[i]; i++)
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] += 32;
for (i = 0; str[i]; i++) {
if (i == 0)
tmp[++j] = str[i];
else if (str[i + 1] != '\0') {
if (str[i] != str[i - 1] + 1 || str[i] != str[i + 1] - 1)
tmp[++j] = str[i];
else if (tmp[j] != '-')
tmp[++j] = '-';
}
else
tmp[++j] = str[i];
}
tmp[++j] = '\0';
printf("%s\n%s", str, tmp);
break;
default:
printf("输入错误");
break;
}
return 0;
}
#include<stdio.h>
#include<string.h>
#define MAX 255
int lianxuzichuan(char t[],int b,int e)
{
for(int i=b; i<e; i++)
{
if(t[i+1]-1!=t[i])
{
return 0;
}
}
return 1;
}
int main()
{
int n, i,j;
char str[201];
printf("请输入操作:\n1 表示全部转化为大写字母输出,如abC 变成 ABC\n");
printf("2 表示全部转换为小写字母输出,如abC变成abc\n");
printf("3 表示将字符串整个逆序输出,如 abc 变成 cba\n");
printf("4 表示将字符串中对应的大写字母转换为小写字母,而将其中的小写字母转化为大写字母输出,如 abC变成ABc\n");
printf("5 表示将全部转换为小写字母,并将其中所有的连续子串转换为对应的缩写形式输出,比如abcD 转换为a - d,其次, - 至少代表1个字母,既如果是ab,则不需要转换为缩写形式。)\n");
scanf("%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 if(str[i] >= 'a'&&str[i] <= 'z')
{
printf("%c", str[i] - 'a' + 65);
}
}
break;
case 5:
{
for (i = 0; i < strlen(str); i++)
{
if ( str[i] >= 'A'&&str[i] <= 'Z' )
{
str[i] = str[i] - 'A' + 97;
}
}
int maxlen=0;
int b=0,e=0;
for (i = 0; i < strlen(str); i++)
{
for (j = strlen(str)-1; j >i+2; j--)
{
if(lianxuzichuan(str,i,j)&&j-i>maxlen)
{
maxlen=j-i;
b=i,e=j;
//printf("%c - %c",str[i],str[j]); i=j;break;
}
}
}
for (i = 0; i < strlen(str); i++)
{
if(i<=b||i>=e)
{
printf("%c",str[i]);
}
if(i==b+1&&e-b>=2)
{
printf(" - ");
i=e-1;
}
}
break;
}
default:
printf("输入错误\n");
break;
}
return 0;
}