本题要求实现一个删除字符串中的指定字符的简单函数。
函数接口定义:
void delchar( char *str, char c );
其中char *str
是传入的字符串,c
是待删除的字符。函数delchar
的功能是将字符串str
中出现的所有c
字符删除。
裁判测试程序样例:
#include
#define MAXN 20
void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char str[MAXN], c;
scanf("%c\n", &c);
ReadString(str);
delchar(str, c);
printf("%s\n", str);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
a
happy new year
输出样例:
hppy new yer
void delchar(char *str, char c) {
int len = 0;
while (str[len] != '\0') {
len++;
}
int cnt = 0;
for (int i = len - 1; i >= 0; i--) {
if (str[i] == c) {
for (int j = i; j < len - cnt; j++) {
str[j] = str[j + 1];
}
cnt++;
}
}
}
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy
将输入字符串char *t
中从第m个字符开始的全部字符复制到字符串char *s
中。若m
超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7
happy new year
输出样例:
new year
void strmcpy(char *t, int m, char *s) {
int n = strlen(t);
if (m > n) {
*s = NULL;
} else {
for (int i = 0; i <= (n - m); i++) {
s[i] = t[m + i - 1];
}
}
}
本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。
函数接口定义:
bool palindrome( char *s );
函数palindrome
判断输入字符串char *s
是否为回文。若是则返回true
,否则返回false
。
裁判测试程序样例:
#include
#include
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
char s[MAXN];
scanf("%s", s);
if ( palindrome(s)==true )
printf("Yes\n");
else
printf("No\n");
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
thisistrueurtsisiht
输出样例1:
Yes
thisistrueurtsisiht
输入样例2:
thisisnottrue
输出样例2:
No
thisisnottrue
bool palindrome(char *s) {
int j = strlen(s) / 2;
int len = strlen(s);
for (int i = 0; i <= j; i++) {
if (s[i] != s[len - i - 1]) return false;
}
return true;
}
本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。
函数接口定义:
void StringCount( char *s );
其中char *s
是用户传入的字符串。函数StringCount
须在一行内按照
大写字母个数 小写字母个数 空格个数 数字个数 其它字符个数
的格式输出。
裁判测试程序样例:
#include
#define MAXS 15
void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
StringCount(s);
return 0;
}
/* Your function will be put here */
输入样例:
aZ&*?
093 Az
输出样例:
2 2 1 3 4
void StringCount(char *s) {
int da = 0, xiao = 0, kong = 0, shu = 0, qi = 0;
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] >= 'A' && s[i] <= 'Z') da++;
else if (s[i] >= 'a' && s[i] <= 'z') xiao++;
else if (s[i] == ' ') kong++;
else if (s[i] >= '0' && s[i] <= '9') shu++;
else qi++;
}
printf("%d %d %d %d %d", da, xiao, kong, shu, qi);
}
本题要求实现一个函数,将两个字符串连接起来。
函数接口定义:
char *str_cat( char *s, char *t );
函数str_cat
应将字符串t
复制到字符串s
的末端,并且返回字符串s
的首地址。
裁判测试程序样例:
#include
#include
#define MAXS 10
char *str_cat( char *s, char *t );
int main()
{
char *p;
char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
scanf("%s%s", str1, str2);
p = str_cat(str1, str2);
printf("%s\n%s\n", p, str1);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
abc
def
输出样例:
abcdef
abcdef
char *str_cat(char *s, char *t) {
char *p;
p = strcat(s, t);
return p;
}
本题要求实现一个将长整数转化成16进制字符串的简单函数。
函数接口定义:
void f( long int x, char *p );
其中x
是待转化的十进制长整数,p
指向某个字符数组的首元素。函数f
的功能是把转换所得的16进制字符串写入p
所指向的数组。16进制的A~F
为大写字母。
裁判测试程序样例:
#include
#define MAXN 10
void f( long int x, char *p );
int main()
{
long int x;
char s[MAXN] = "";
scanf("%ld", &x);
f(x, s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
123456789
输出样例1:
75BCD15
输入样例2:
-125
输出样例2:
-7D
void f(long int x, char *p) {
int q = x;
char a[10];
int y;
int i = 0, temp;
if (x < 0) x = -x;
while (x > 15) {
y = x % 16;
if (0 <= y && y <= 9) {
a[i] = y - 1 + '1';
} else {
a[i] = y - 10 + 'A';
}
x = x / 16;
i++;
}
temp = i;
if (0 <= x && x <= 9) {
a[i] = x - 1 + '1';
} else {
a[i] = x - 10 + 'A';
}
if (q < 0)printf("-");
for (i = 0; i <= temp; i++) {
p[i] = a[temp - i];
}
}