本篇提供了关于C语言程序设计中字符串部分的经典案例,可供C语言的初学者们进行一个学习和编译练习。
/*Case 1
字符串替换
实现字符串“Good morning!”到“Good evening!”的转换*/
char* MyReplace(char* s1, char* s2, int pos) { //自定义的替换函数
int i, j;
i = 0;
for ( j = pos; s1[j]!='\0';j++) //从原字符串指定位置开始替换
{
if (s2[i]!='\0') //判断有没有遇到结束符
{
s1[j] = s2[i]; //将替换内容逐个替换
i++;
}
else
{
break;
}
}
return s1;
}
int main() {
char str1[50] = "Good morning!";
char str2[50] = "evening";
int position; //定义整型变量存储要替换的位置
printf("替换前的字符串:\n%s\n", str1);
printf("请输入你想替换的位置:\n");
scanf("%d", &position);
MyReplace(str1, str2, position); //调用替换函数
printf("替换后的字符串:\n%s\n", str1);
return 0;
}
/*Case 2
删除字符串中的字串
从键盘输入一个字符串,输入要删除的字符串起始位置及长度,然后输出删除后的字符串*/
char* del(char s[], int pos, int len) {
int i;
for ( i = pos+len-1; s[i]!='\0'; i++,pos++)
{
//i的初值为指定删除部分后面的第一个字符
s[pos - 1] = s[i];
}
s[pos - 1] = '\0';
return s;
}
int main() {
char str[50];
int position;
int length;
printf("请输入字符串:\n");
gets(str);
printf("请输入要删除的位置:\n");
scanf("%d", &position);
printf("请输入要删除的长度:\n");
scanf("%d", &length);
del(str, position, length);
printf("删除后的字符串为:\n%s\n",str);
return 0;
}
/*Case 3
到底有多少单词
首先在屏幕上输入一句话,每个单词之间用空格隔开,要求第一个字符和最后一个字符都不能为空格;
然后统计出这句话的单词数量,并把结果输出到屏幕上*/
int main() {
char str[50]; //定义保存字符串的数组
int i, count = 1; //count表示单词的个数
char blank; //表示空格
printf("请输入字符串:\n");
gets(str); //输入字符串
if (str[0]=='\0') //判断如果字符串为空的情况
{
printf("No Words!\n");
}
else
{
for ( i = 0; str[i] != '\0'; i++) //循环判断每一个字符
{
blank = str[i]; //得到数组中的字符元素
if (blank==' ') //判断是不是空格
{
count++; //如果是则加一
}
}
printf("There are %d words in this sentence.\n", count);
}
return 0;
}
/*Case 4
在指定位置插入字符*/
void insert(char s[], char t, int i) {
char str[100];
strncpy(str, s, i); //将s数组中前i个字符复制到str中
str[i] = t; //把t放到str后边
str[i + 1] = '\0'; //结束str
strcat(str, (s + i)); //将剩余的字符串连接到str
strcpy(s, str); //将str复制到s中
}
int main() {
char str[100], c;
int position;
printf("请输入字符串:\n");
gets(str);
printf("请输入要插入的字符:\n");
scanf("%c", &c);
printf("请输入要插入的位置:\n");
scanf("%d", &position);
insert(str, c, position);
puts(str);
return 0;
}
/*Case 5
禁用strcpy()
不使用strcpy()函数,把字符串1中的内容复制到字符串2中*/
int main() {
char s1[50], s2[50];
int i = 0;
printf("请输入字符串:\n");
gets(s1);
while (s1[i]!='\0')
{
s2[i] = s1[i];
i++;
}
s2[i] = '\0';
printf("复制的结果是:\n");
puts(s2);
return 0;
}
/*Case 6
那些字符串
对“c language”、“hello world”、“itcast”、“strcmp”和“just do it”
这五个字符串按照首字母大小进行由小到大的排序,并将结果输出*/
void sort(char* strings[], int n) {
char* temp;
int i, j;
//选择排序法
for ( i = 0; i < n-1; i++)
{
for ( j = i+1; j < n; j++)
{
if (strcmp(strings[i],strings[j])>0)
{
temp = strings[i];
strings[i] = strings[j];
strings[j] = temp;
}
}
}
}
int main() {
int n = 5;
int i;
char* strings[] = { "c language","hello world","itcast","strcmp","just do it"};
sort(strings, n);
for ( i = 0; i < n; i++)
{
printf("%s\n", strings[i]);
}
return 0;
}
/*Case 7
你中有我
字符串1和字符串2,查找在字符串1中是否有字符串2*/
int main() {
char str1[30], str2[30], * p;
printf("请输入字符串1:\n");
gets(str1);
printf("请输入字符串2:\n");
gets(str2);
p = strstr(str1, str2); //确定str1中是否包含str2
if (p)
{
printf("str1包含str2!\n");
}
else
{
printf("str1不包含str2!\n");
}
return 0;
}
/*Case 8
密码疑云
设计一种算法,把电文明文加密之后变成密文,利用解密函数才能对密文解密,显示出明文内容*/
int main() {
int flag = 1;
int i;
int count = 0;
char MingWen[128] = { '\0' };
char MiWen[128] = { '\0' };
while (1)
{
if (flag == 1)
{
printf("请输入要加密的明文:");
scanf("%s", &MingWen);
count = strlen(MingWen);
for (i = 0; i < count; i++)
{
MiWen[i] = MingWen[i] + 3;
}
MiWen[i] = '\0';
//输出密文信息
printf("加密后的密文:%s\n", MiWen);
}
else if (flag==2)
{
printf("请输入要解密的密文:");
scanf("%s", &MiWen);
count = strlen(MiWen);
for (i = 0; i < count; i++)
{
MingWen[i] = MiWen[i]-3;
}
MingWen[i] = '\0';
//输出明文信息
printf("解密后的明文:%s\n", MingWen);
}
else if(flag==3)
{
break;
}
else
{
printf("命令错误,请重新输入!\n");
}
printf("#################\n");
printf("# 1.加密明文 #\n");
printf("# 2.解密密文 #\n");
printf("# 3.退出程序 #\n");
printf("#################\n");
scanf("%d", &flag);
}
return 0;
}
/*Case 9
回文字符串
从键盘上输入字符串,判断其是否为回文字符串*/
方法一
//方法1
int fun(int low, int high, char* str, int length) {
if (length==0||length==1)
{
return 1;
}
if (str[low]!=str[high])
{
return 0;
}
return fun(low + 1, high - 1, str, length - 2);
}
int main() {
int length = 0;
char ch, str[50];
printf("请输入一个字符串:\n");
while ((ch=getchar())!='\n')
{
str[length] = ch;
length++;
}
if (fun(0,length-1,str,length)==1)
{
printf("YES!\n");
}
else
{
printf("NO!\n");
}
return 0;
}
方法二
//方法二
int fun(char* begin, char* end) {
if (begin==NULL||end==NULL||begin>end)
{
return 0;
}
while (begin<end)
{
if (*begin!=*end)
{
return 0;
}
begin++;
end--;
}
return 1;
}
int main() {
int length = 0;
char ch, str[50];
char* begin = NULL;
char* end = NULL;
printf("请输入一个字符串:\n");
while ((ch=getchar())!='\n')
{
str[length] = ch;
length++;
}
begin = str;
end = &str[length - 1];
if (fun(begin,end)==1)
{
printf("YES!\n");
}
else
{
printf("NO!\n");
}
return 0;
}
本篇的所有代码是在VS编译环境下操作的,如有错误,望大家指正!!!