#include<stdio.h>
#include<stdlib.h>
#define MAX 1024
int main(){
#if(0)
// 使用 fgets 函数读取用户输入的字符串(英文),并用指针法来计算字符串的字符个数。 strlen
char str[MAX] ;
char *p = str;
int lenght = 0;
printf("请输入一串字符:");
fgets(p,MAX,stdin); //在这里fgets会默认将'\n'读取进去,默认加上'\0';
while (*p++!='\0')
{
lenght++;
}
printf("您输入的字符串的长度为:%d\n",lenght-1); //默认的'\n'占位 所以要-1
printf("您输入的字符串是:%s",p-lenght-1); // 此时指针已经到了'\0'的位置 减去'\0'的位置,减去 字符串的长度,回到指针的第一个地址
printf("您输入的字符串的长度为:%s",str);
#endif
#if(0)
// 使用 fgets 函数读取用户输入的字符串(中英文混入),并用指针法来计算字符串的字符个数。 strlen
char str[MAX] ;
char *p = str;
int lenght = 0;
printf("请输入一串字符:");
fgets(p,MAX,stdin); //中文在数组中的存储特殊格式:(int)a[0] < 0 ; a[0]为汉字
while (*p++!='\0')
{
lenght++;
if((int)(*p)<0){
p++; // 汉字存储在两个字节单元,当遇到首个单元之后,指针加一,直接跳过第二个汉字
}
}
printf("您输入的字符串的长度为:%d\n",lenght-1);
// printf("您输入的字符串是:%s",p-lenght-1);
printf("您输入的字符串的长度为:%s",str);
#endif
#if(0)
//使用 fgets 函数读取用户输入的字符串(英文)并存储到字符数组 str1 中,并利用指针,将 str1 中的字符串拷贝到字符数组 str2 中 strcpy
char str1[MAX] , str2[MAX] ;
char *p1 = str1 , *p2 = str2;
printf("请输入一段字符串:");
fgets(str1,MAX,stdin);
while ((*p2++=*p1++)!='\0')
{
}
printf("str:%s",str1);
printf("str2:%s",str2);
#endif
#if(0)
//使用 fgets 函数读取用户输入的字符串(英文)并存储到字符数组 str1 中,并利用指针,将 str1 中的字符串拷贝到字符数组 str2 中 strncpy
// 并且用户可以指定 拷贝内容的大小
char str1[MAX] , str2[MAX] ;
char *p1 = str1 , *p2 = str2;
int lenth ;
printf("请输入一段字符串:");
fgets(str1,MAX,stdin); // 这个地方有一个回车,fgets在这里已经接收
printf("请输入您想拷贝的内容的长度:");
scanf("%d",&lenth);
while (lenth--)
{
*p2++=*p1++;
}
*p2='\0'; //字符串结束标识符
printf("str:%s",str1);
printf("str2:%s\n",str2);
#endif
#if(0)
// 使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,并打印出来 strcat
char str1[MAX] , str2[MAX];
char *p1 = str1 , *p2 = str2;
printf("请输入一段字符串:");
fgets(str1,MAX,stdin);
printf("请在输入一段字符串:");
fgets(str2,MAX,stdin); //接收用户的输入
printf("正在拼接请您稍等.........\n");
while (*(p1++)!='\n'); // str1指针的位置到最后一个字母处
p1--; //此时p1指针在'\n'的位置p1--退回一个字节
while ((*p1++=*p2++)!='\0');
printf("拼接完成\n拼接后的字符串为:%s",str1);
#endif
#if(0)
// 使用 fgets 函数接收用户输入的两个字符串到 str1 和 str2 中,将 str2 连接到 str1 后边,(含中文输入)并打印出来 strncat
char str1[MAX] , str2[MAX];
char *p1 = str1 , *p2 = str2;
int length;
printf("请输入一段字符串:");
fgets(str1,MAX,stdin);
printf("请在输入一段字符串:");
fgets(str2,MAX,stdin); //接收用户的输入
printf("请输入您想拷贝的内容的长度:");
scanf("%d",&length);
printf("正在拼接请您稍等.........\n");
while (*(p1++)!='\n'); // str1指针的位置到最后一个字母处
p1--; //此时p1指针在'\n'的位置p1--退回一个字节
while (length--){
if((int)(*p2)<0){
*p1++=*p2++; //当为汉字的时候,需要存入两次值
}
*p1++=*p2++;
};
*p1 ='\0';
printf("拼接完成\n拼接后的字符串为:%s\n",str1);
#endif
#if(0)
// 使用 fgets 函数接收用户输入的两个字符串(仅支持英文)到 str1 和 str2 中,对比 str1 和 str2,
// 如果两个字符串完全一致,打印“完全一致”;如果存在不同,打印第一处不同的位置(索引下标) strcmp
char str1[MAX] , str2[MAX];
char *p2 = str2 , *p1 = str1;
int index =1;
printf("请输入一段字符串:");
fgets(str1,MAX,stdin);
printf("请在输入一段字符串:");
fgets(str2,MAX,stdin);
while (*p1!='\0' && *p2!='\0') //当两个字符串每位都不为'\0'的时候代表两个字符串目前一致
{
if(*p1++ != *p2++){ //如果两个字符串出现不一致的时候,返回index
break;
}
index++;
}
if(*p1 =='\0' && *p2=='\0'){ //到最后两个字符串的最后一位全部为'\0'表示全部一致
printf("两个字符串完全一致\n");
}else
{
printf("两个字符串不完全一致,在%d位出现问题\n",index);
}
#endif
#if(1)
// 使用 fgets 函数接收用户输入的两个字符串(中英文混入)到 str1 和 str2 中,对比 str1 和 str2,
// 如果两个字符串完全一致,打印“完全一致”;如果存在不同,打印第一处不同的位置(索引下标) 指定比较前几位 strncmp
char str1[MAX];
char str2[MAX];
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 1, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\0' && *target2 != '\0') // n 以及两个字符串每位是否不为'\0'控制着循环
{
ch = *target1;
if (ch < 0)
{
if (*target1++ != *target2++ || *target1++ != *target2++) //当 为汉字的时候,如果两个存储空间的值不相等的话break;
{ // break;后面的代码将不在执行,直接打印出来 字符串不完全相同
break;
}
}
else
{ //如果不是汉字的时候,进行两个字符的判断是否相等,不相等就break;
if (*target1++ != *target2++) // 课后作业的答案感觉有问题,比较完汉字之后都会进入到这个循环内。
{
break;
}
}
index++;
n--;
}
if ((n == 0) || (*target1 == '\0' && *target2 == '\0'))
{
printf("两个字符串的前 %d 个字符完全相同!\n", index-1);
}
else
{
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
#endif
system("pause");
}