1、改错:
(a)、void test1()
{
char string[10];
char *str1 = "0123456789";
strcpy(string, str1);
}
(b)、void test2()
{
char string[10], str1[10];
for (i=0; i<10; i++)
{
str1[i] = 'A';
}
strcpy(string, str1);
}
(c)、void test3(char *str)
{
char string[10];
if (strlen(str1)<=10)
{
strcpy(string, str1);
}
}
//a.字符串str1大小超出数组string范围
//b.字符数组之间赋值不能用strcpy,应用循环赋值
//c.strlen不包含字符串结束符'\0',strcpy可能超出数组范围
2、找赛手:2个羽毛球队比赛,各出3人,每个人只比一次。甲队为A,B,C三人,乙队为X,Y,Z三人。有人打听比赛名单,A说他不和X比,C说不和X,Z比。编程找出三队赛手的名单.
#include <stdio.h>
int main(void)
{
char ret[3] = {};
char mem[3] = { 'X','Y','Z' };
int i = 0;
for (i = 0; i < 3; i++)//甲队的C
{
ret[2] = mem[i];
if (ret[2] != 'X' && ret[2] != 'Z')
{
mem[i] = '0';
break;
}
}
for (i = 0; i < 3; i++)//甲队的A
{
ret[0] = mem[i];
if (mem[i] != '0' && ret[0] != 'X')
{
mem[i] = '0';
break;
}
}
for (i = 0; i < 3; i++)//甲队的B
{
ret[1] = mem[i];
if (mem[i] != '0')
break;
}
for (i = 0; i < 3; i++)//输出
{
printf(" %c-%c ", i + 'A', ret[i]);
}
return 0;
}
3、用C语言实现字符串中子字符串的替换, 成功返回0,失败返回-1.例如:“ABCDEFG”这个字符串,把其中”BCD”替换成“9527”这个子串,结果变成:“A9527EFG”
函数原型:
int str_replace(char str, char replaced_str, char *new_str)
#include <stdio.h>
#include <string.h>
#define NUM 50
int str_replace(char*str, char*replaced_str, char*new_str)//str,目标字符串,新字符串
{
char *str_head = str;//储存str头指针用于最后输出
char *str_midle_head = str;//在str中指向目标字符串的首位置
char *str_midle_tail = str;//在str中指向目标字符串的末位置
char str_tail[NUM] = {};//储存str中目标字符串之后的内容
while (*str_midle_head != *replaced_str)//在str中找到目标字符串的首位置
str_midle_head++;
while (*(replaced_str + 1) != '\0')//在str中找到目标字符串的末位置
replaced_str++;
while (*str_midle_tail++ != *replaced_str);
strcpy(str_tail, str_midle_tail);//储存末位置之后的内容
strcpy(str_midle_head, new_str);
strcpy(str_midle_head + strlen(new_str), str_tail);
if (!strlen(str_head))
return -1;
else
printf("%s", str_head);
return 0;
}
int main(void)
{
char* new_str = "Alien";
char ret[NUM] = { "abcdefg" };
str_replace(ret, "d", new_str);
return 0;
}