1.题目: 请编写一个C函数,该函数将一个字符串逆序
#include <stdio.h>
#include <string.h>
void swap( char *str, int len )
{
int i = 0;
int temp = 0;
for( i = 0; i < len / 2; i++ )
{
temp = str[i]; //先将str[i]的值存到中间变量temp中
str[i] = str[len - 1 - i]; //再将和str[i]首尾对应的str[len - 1 - i]赋给str[i]
str[len - 1 - i] = temp; //让str[len - 1 -i]等于temp
}
}
int main()
{
char str[100] = {0};
int len = 0;
printf("please input a string:");
scanf("%s",str); //输入字符串
len = strlen(str); //让len等于字符串的长度
swap( str, len ); //调用交换函数
printf("%s\n",str); //输出交换后的字符串
return 0;
}
2.题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
#include<stdio.h>
int main()
{
void fun( int num,char *str); //声明fun函数
char str[100] = {0};
int num = 0;
printf("Please input a number:");
scanf("%d",&num); //录入num的值
fun(num,str);
return 0;
}
void fun(int num,char *str)
{
int i = 0;
int j = 0;
while( num != 0 )
{
i = num % 10 + '0';
str[j++] = i;
num /= 10;
}
//从最低位开始将num中每一位取出加上字符'0'变成数字字符,存到str字符数组中
while( j-- )
{
printf("%c",str[j]);
} //倒着输出字符数组str中的字符
printf("\n");
}
3.题目: 输入一个字符串,计算字符串中子串出现的次数
#include <stdio.h>
void compare(char *str1, char *str2)
{
int count = 0;
char *p1 = NULL;
char *p2 = NULL; //定义p1 p2两个空指针
p1 = str1;
p2 = str2; //将str1和str2两个字符串分别赋给p1 p2
while(*p1 != '\0')
{
if(*p1 == *p2)
{
p1++;
p2++; //当两个指针里的字符相等时,比较下一个字符
}
else
{
p1++; //不相等时p1往后一个字符
}
if(*p2 == '\0')
{
count++; //当p2到最后时代表p1中有和p2一样的字符,让count+1
p2 = str2; //让p2再次等于str2
}
}
printf("%d\n",count); //输出count的值
}
int main()
{
char str1[100] = {0};
char str2[100] = {0};
printf("please input the first string:\n");
scanf("%s",str1); //输入字符串str1
printf("please input the second string:\n");
scanf("%s",str2); //输入字符串str2
compare(str1,str2); //调用compare函数
return 0;
}
4.题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.
#include <stdio.h>
#include <string.h>
void swap(char *str, int len)
{
int i = 0;
int temp = 0;
for( i = 0; i < len / 2; i++)
{
temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
} //将字符串逆序
}
void str_convert(char *str, int len)
{
int num = 0;
swap(str, len); //调用逆序函数,将整个字符串逆序
while(*str != '\0')
{
if(*str == ' ' || *str == '\0')
{
swap(str - num, num); //遍历逆序后的字符串,如果碰到空格或者空,再逆序空格之前的单词
str++; //跳过空格
num = 0; //让num清0
}
str++;
num++; //用来计算单词的长度
}
swap(str - num, num); //逆序最后的单词
}
int main()
{
char str[] = {"im am from shanghai"};
int len = strlen(str);
printf("%s\n",str); //输出正常顺序的字符串
str_convert(str,len); //调用倒置函数
printf("%s\n",str);
return 0;
}
5.题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.
提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧
#include <stdio.h>
#include <string.h>
int head_flag = 0; //定义全局变量head_flag
int tail_flag = 0; //定义全局变量tail-flag
char *head_find( char *str,char *head )
{
char *head_temp = NULL;
int head_count = 0;
int head_len = strlen(head);
while( *str != '\0' && !head_flag ) //当字符串str不为空并且head_flag为0时进行循环
{
while( *str == *head ) //当字符串str中有字符等于head中的字符时进行循环
{
str++;
head++;
head_count++; //一个字符相等head_count+1
if( head_count == head_len ) //当head_count等于head字符串长度时
{
head_flag = 1; //让全局变量head_flag = 1
head_temp = str - head_len; //head_temp等于字符串str中head开始的位置
break;
}
}
str++;
}
if( head_flag ==1 )
{
return head_temp; //当head_flag == 1时,返回head_temp的值
}
}
char *tail_find( char *str,char *tail )
{
char *tail_temp = NULL;
int tail_count = 0;
int tail_len = strlen(tail);
if( head_flag == 1 ) //当head_flag = 1时代表字符串str中有head字符
{
while( str != '\0' && !tail_flag ) //当字符串str不为空并且tail_flag = 0时进行循环
{
while( *str == *tail ) //当字符串str中有字符等于tail中的字符时进行循环
{
str++;
tail++;
tail_count++; //一个字符相等tail_count + 1
if( tail_count == tail_len ) //当tail_count等于tail字符串长度时
{
tail_flag = 1; //让全局变量tail_flag = 1
break;
}
}
str++;
}
if( tail_flag ==1 )
{
return str - 1; //当tail_flag == 1时,返回str中tail结束的位置
}
}
}
void head_tail( char *str,char *head,char *tail )
{
int i = 0;
char *str_start = head_find( str,head ); //调用head_find函数,让str_start等于其返回值
char *str_end = tail_find( str,tail ); //调用tail_find函数,让str_end等于其返回值
int str_len = str_end - str_start; //让str_len等于str中从head开始到tail结束的长度
printf("result is : ");
for( i = 0; i < str_len; i++ )
{
printf("%c",*str_start); //从head开始的地方输出字符一直到tail结束的地方
str_start++;
}
printf("\n");
}
int main()
{
char *str = "sadheadhauboisoktail";
char *head = "head";
char *tail = "tail";
printf("string is :%s\n",str);
printf("head is :%s\n",head);
printf("tail is :%s\n",tail);
head_tail(str,head,tail); //调用head_tail函数
return 0;
}