当前位置:   article > 正文

【C语言】字符串_利用字符串函数gets,strat,分别输入两个字符串s1=“this is”,s2=“a book

利用字符串函数gets,strat,分别输入两个字符串s1=“this is”,s2=“a book”

1.字符串输入

gets()函数

gets()(get string)函数对于交互式程序非常方便,它从系统的标准输入设备(通常是键盘)获得一个字符串。因为字符串没有预定的长度,所以gets()函数通过判断遇到的第一个换行符(\n)结束输入,按回车键可以产生这个字符。它读取换行符之前(不包括换行符)的所有字符,并在这些字符后添加一个空字符(\0)。

  1. #include<stdio.h>
  2. #define MAX 81
  3. int main(void)
  4. {
  5. char name[MAX];
  6. char* ptr; //指向char的指针
  7. printf("Please input your name.\n");
  8. ptr = gets(name); //使用一个地址吧字符串赋值给name
  9. //gets()函数使用return关键字返回字符串的地址
  10. printf("name, %s\n", name);
  11. printf("ptr, %s\n", ptr);
  12. return 0;
  13. }
fgets()函数

因为gets()函数不会检查存储区是否能够容纳实际输入的数据,多出来的字符简单地溢出到相邻的内存区,所以上面的代码在编译的时候会有warning。fgets()函数和gets()函数的不同:

  • 它需要第二个参数来说明最大读入字符数。如果这个参数值为n,fgets()就会读取最多n-1个字符或者读完一个换行符为止(因为会自动添加一个空字符(\n)),由这两者中最先满足的那个结束输入。
  • 如果fgets()读取到换行符,就会把它存到字符串里,而不是像gets()那样丢弃。
  • 它还需要第三个参数来说明读哪一个文件,从键盘上读取数据时,可以使用stdin(代表standard input)作为参数,这个标识符在stdio.h中定义。
  1. #include<stdio.h>
  2. #define MAX 81
  3. int main(void)
  4. {
  5. char name[MAX];
  6. char* ptr;
  7. printf("Please input your name.\n");
  8. ptr = fgets(name, MAX, stdin);
  9. printf("name, %s\n", name);
  10. printf("ptr, %s\n", ptr);
  11. return 0;
  12. }

有空行!fgets()函数没有丢弃输入的换行符!!!

scanf()函数

scanf()函数可以使用%s格式来读入一个字符串,scanf()函数和gets()函数的主要区别在于如何决定字符串何时结束。scanf()函数更基于获得单词(get word)而不是获取字符串(get string)。scanf()函数有两种方法决定输入结束,无论哪一种都是遇到的第一个非空白字符开始

  1. 如果使用%s格式,字符串读取到(但不包括)下一个空白字符(比如空格、制表符或换行符)
  2. 如果指定了字段宽度,比如%10s,scanf()函数就会读取10个字符或者直到遇到第一个空白字符,由二者最先满足的那一个终止输入

2.字符串输出

puts()函数

puts()函数使用很简单,只需要给出字符串参数的地址,它遇到空字符(\0)就会结束输出(所以必须要有空字符)。puts()函数在显示字符串的时候,会自动在其后添加一个换行符(\n)。

  1. #include<stdio.h>
  2. #define DEF "I am a #defined string."
  3. int main(void)
  4. {
  5. char str1[80] = "An array was initialized to me.";
  6. const char* str2 = "A pointer was initialized to me.";
  7. puts("I'm an argument to puts()."); //直接用字符串做参数
  8. puts(DEF); //用宏定义做参数
  9. puts(str1);
  10. puts(str2);
  11. puts(&(str1[5])); //必须用括号strl1[5],因为str1将会首先结合&,然后在[5]结合,将出错
  12. puts(str2 + 4);
  13. return 0;
  14. }

fputs()函数

fputs()函数puts()函数面向文件版本,两者主要的区别是:

  • fputs()函数需要第二个参数来说明要写的文件,可以使用stdout(standard output)作为参数来进行输出显示。
  • 与puts()函数不同,fputs()函数并不为输出自动添加换行符。
printf()函数

如同puts()函数一样,printf()函数在输出字符串的时候同样需要一个字符串地址作为参数,但是printf()函数没有puts()函数方便,但是它可以格式化多种数据类型,输出的时候也不自动添加换行符。

3.输入一个字符串,并反向输出。

  1. #include<stdio.h>
  2. #define STR_LEN 101
  3. void reverse(char *str) {
  4. char* head = str;
  5. char* tail = str;
  6. char ch;
  7. while (*tail++);//经过 while(*tail++); 之后,
  8. //tail指针已经指向了字符串的最末尾('\0')后面的位置
  9. tail -= 2;//,所以,tail减一指向'\0',再减一则指向末尾的一个有效字符。
  10. //tail -= 2;其实就是将指针向前移动两个步长。
  11. while (head < tail)
  12. {
  13. ch = *head;
  14. *head++ = *tail;
  15. *tail-- = ch;
  16. }
  17. }
  18. int main()
  19. {
  20. char str[STR_LEN];
  21. puts("请输入字符串(长度小于100):");
  22. gets(str);
  23. reverse(str);
  24. puts("反转后的字符串:");
  25. puts(str);
  26. return 0;
  27. }

4.字符数组的输入和输出:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char str[5];
  5. //第一种方法:
  6. scanf_s("%s", str,5); //scanf_s(格式控制用%s,字符数组名(地址就是字符数组名),
  7. //缓冲区的大小(表示最多读取5-1个字符))
  8. printf("%s\n", str);
  9. //第二种方法:
  10. gets_s(str, 5); //get_s(字符数组名,缓冲区的大小)
  11. puts(str);
  12. return 0;
  13. }

两者区别:gets()和puts()函数只能输入和输出一个字符串,不可输出多个,而scanf()和printf()可输入输出多个。如puts(str1,str2);是错误的写法。

5.字符串函数

字符串连接函数:strcat(字符数组1,字符数组2)

1、字符串2连接到字符串1的后面,将连接后的结果放在字符数组1中,最后得到字符数组1的地址;

2、两个字符串后面均有结束符’\0’,在连接时字符串1后面的结束符会被取消,只在新串最后保留结束符。

字符串复制函数:strcpy(字符数组1,字符数串2或者字符数组名)
                            strncpy(字符数组1,字符串2或者字符数组名,n)

1、若开始没有对字符数组1进行初始化或者复制,str1中的内容是无法预知的,复制时str2将内容和结束符一起复制到str1中,而此时str1字符数组结束符后面的剩余空间的字节内容不一定是’\0’;

2、不能用赋值语句将字符串常量或者字符数组直接赋值给字符数组,如str1=“world”;这写法是错误的,必须要用strcpy()函数,用赋值语句将一个字符赋值给字符型变量或者字符数组是可以的。

字符串比较函数:strcmp(字符串1或者字符数组,字符数串2或者字符数组):

1、两个字符串从左到右按照 ACSII 码值大小比较,直到出现不同的字符或者遇到’\0’为止;

2、若出现不相同的字符,则以第一对不相同的字符的比较结果为准;

3、字符串1等于字符串2,函数值为0,字符串1大于字符串2,函数值为正整数,字符串1小于字符串2,函数值为负整数;

4、两个字符串不能直接用str1>str2这种方式比较,必须用strcmp()函数。

字符串长度函数:strlen(字符串或者字符数组)

1、strlen()函数在测试字符串长度时不包括结束符;

2、为了测试字符串的实际长度,C语言规定了一个字符串结束标志,以字符’\0’作为结束标志,因此上述程序中虽然字符数组大小为15,但是程序运行结果为5,因为碰到’\0’自动结束。

字符串转换大小写函数:大写转小写:strlwr(字符数组)
                                        小写转大写:strupr(字符数组)
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char str1[15] = "Hello";
  6. char str2[7] = "world!";
  7. char str3[12];
  8. printf("%d\n", strcmp(str1, str2));//比较两个字符串
  9. printf("%d\n", strlen(str1));//计算字符串1的长度
  10. _strlwr_s(str1, 6);//第一个参数传一个char类型的指针,
  11. //可以传一个数组,第二个参数传入strlen(str) + 1
  12. puts(str1);
  13. _strupr_s(str1, 6);
  14. printf("%s\n", str1);
  15. strcat_s(str1, 15, str2);//连接两个字符串
  16. printf("%s\n", str1);
  17. strcpy_s(str3, 12, str2);//将字符串2复制到字符串3
  18. printf("%s\n", str3);
  19. strncpy_s(str3, 12, str2, 3);//将字符串2前3个字符复制到str3中
  20. printf("%s\n", str3);
  21. return 0;
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码吟游诗人2/article/detail/62728
推荐阅读
相关标签
  

闽ICP备14008679号