问题 A: 字符串连接
问题描述:
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
- 输入
每一行包括两个字符串,长度不超过100
- 输出
可能有多组测试数据,对于每组数据,
不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。
输出连接后的字符串。
- 样例输入
abc def
- 样例输出
abcdef
因为scanf会自动补全字符最后的\0,所以可以用这个当作判断条件,另外记得要在str3最后加上\0,不然会输出烫烫烫烫
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
//const int maxn =85;
//char a[maxn];
int main()
{
char str1[110], str2[110], str3[220];
int len3;
int i;
while (scanf("%s %s", str1, str2) != EOF)
{
len3 = 0;
for (i = 0; str1[i] != '\0'; i++)
{
str3[len3++] = str1[i];
}
for (i = 0; str2[i] != '\0'; i++)
{
str3[len3++] = str2[i];
}
str3[len3] = '\0';
printf("%s\n",str3);
memset(str1,'\0',sizeof(str1));
memset(str2, '\0', sizeof(str2));
memset(str3, '\0', sizeof(str3));
}
return 0;
}
问题 B: 首字母大写
问题描述:对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。
在字符串中,单词之间通过空白符分隔,空白符包括:空格(’ ‘)、制表符(’\t’)、回车符(’\r’)、换行符(’\n’)。
- 输入
输入一行:待处理的字符串(长度小于100)。
- 输出
可能有多组测试数据,对于每组数据,
输出一行:转换后的字符串。
- 样例输入
if so, you already have a google account. you can sign in on the right.
- 样例输出
If So, You Already Have A Google Account. You Can Sign In On The Right.
这题codeup一直说编译错误,可是本地编译是可以的,语言也选对了哇,ww!
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
//const int maxn =85;
//char a[maxn];
int main()
{
char str[110];
int i;
int len;
while (gets_s(str))
{
len = strlen(str);
if ((str[0] <= 'z') && str[0] >= 'a')
str[0] -= 32;
for (i = 1; i < len; i++)
{
if (((str[i-1]==' ')||(str[i - 1] == '\t')||(str[i - 1] == '\n')|| (str[i - 1] == '\r'))&&(str[i] <= 'z') && str[i] >= 'a')
str[i] -= 32;
}
printf("%s\n", str);
memset(str, '\0', sizeof(str));
}
return 0;
}
问题 C: 字符串的查找删除
问题描述:给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
- 输入
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。
- 输出
删除输入的短字符串(不区分大小写)并去掉空格,输出。
- 样例输入
in
#include
int main()
{
printf(" Hi ");
}
- 样例输出
#clude
tma()
{
prtf("Hi");
}
- 注意
注:将字符串中的In、IN、iN、in删除。
太怪了,还是报编译错误,不管了
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
//此函数判断两个字符是否相同,不论大小写,如果相同,返回1,如果不同,返回0
int func(char a, char b)
{
if ((a <= 'Z') && (a >= 'A'))
a += 32;
if ((b <= 'Z') && (b >= 'A'))
b += 32;
if (a == b)
return 1;
else
return 0;
}
int main()
{
char str[110];
int i,j;
int len0;
char str0[10];
int flag;
gets_s(str0);
len0 = strlen(str0);
while (gets_s(str))
{
flag = 0;
for(i = 0; i < strlen(str); i++)
{
//删除短字符
if (func(str[i], str0[0]))
{
flag = 1;//根据flag判断str里面有没有短字符str0
for (j = 1; j < len0; j++)
{
if (!func(str[i + j], str0[j]))
{
flag = 0;
break;
}
}
if (flag == 1)
{
for (j = 0; i+j < strlen(str); j++)
{
str[i + j] = str[i + j + len0];
}
}
}
//删除空格
if (str[i] == ' ')
{
for (j = i; j < strlen(str); j++)
{
str[j] = str[j + 1];
}
}
}
printf("%s\n", str);
memset(str, '\0', sizeof(str));
}
return 0;
}
问题 I: 【字符串】回文串
问题描述:读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
- 输入
一行字符串,长度不超过255。
- 输出
如果是回文串,输出“YES”,否则输出“NO”。
- 样例输入
12321
- 样例输出
YES
注意比较回文字符串的下标,i从0开始到<length/2,比较str[i]和str[length-1-i]
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
int main()
{
char s[260];
int i, length;
int flag;
while (scanf("%s",s) != EOF)
{
flag = 1;
length = strlen(s);
for (i = 0; i < length / 2; i++)
{
if (s[i] != s[length - 1 - i])
flag = 0;
}
if (flag == 1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
PAT B1009 说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出
- 输入
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
- 输出
每个测试用例的输出占一行,输出倒序后的句子。
- 样例输入
Hello World Here I Come
- 样例输出
Come I Here World Hello
有两种方法,第一种是使用scnaf输入单词,第二种是用gets输入句子,然后再分成单词
下面用第一种方法
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<cstring>
//const int maxn =85;
//char a[maxn];
int main()
{
char word[80][80];
int wordnum;
char words[80];
wordnum = 0;
int num = 0;
while (scanf("%s", words) != EOF)
{
strcpy(word[wordnum++], words);
//printf("%s", word[num++]);
memset(words, '\0', sizeof(words));
}
for (wordnum = wordnum - 1; wordnum >= 0; wordnum--)
{
//printf("!!!");
printf("%s", word[wordnum]);
if (wordnum != 0)
printf(" ");
else printf("\n");
}
//memset(a,'\0',sizeof(a));
//scanf("%d", &N);
//scanf("%d %d", &L, &M);
//printf("%d %d\n", L, M);
//printf("%d\n", num);
return 0;
}