|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 liu10 于 2020-2-7 21:00 编辑
- #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");
- }[p=30, 2, left][/p]
复制代码 |
|