Menu Close

字符串及字符数据的输入输出

字符串不过是线性序列中字符的集合。 “ C”始终将字符串视为单个数据,即使它包含空格。 使用单引号表示法定义单个字符。 字符串用双引号表示。

‘C’提供了标准库<string.h>,其中包含许多函数,可用于轻松执行复杂的字符串操作。

声明和初始化字符串

字符串是一个简单数组,其中char为数据类型。 “ C”语言不直接支持将字符串作为数据类型。 因此,要在“ C”中显示字符串,您需要使用一个字符数组。

声明字符串变量的一般语法:

char string_variable_name [array_size];

给字符串赋值

char string_name[string_length] = "string"; 

字符串数组的大小必须在声明字符串变量时确定,因为要靠它计算在字符串变量中存储多少个字符。 字符串声明示例如下:

char first_name[15];    //declaration of a string variable
char last_name[15];

上面的示例表示声明了两个数组大小为15的字符串变量。这意味着给定的字符数组最多可以容纳15个字符。在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

下列程序字符串的赋值方法都是可以的。

char first_name[15] = "ANTHONY";
char first_name[15] = {'A','N','T','H','O','N','Y','\0'}; // NULL character '\0' is required at end in this declaration
char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */
char string2 [ ] = "world";  /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */
char string3[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ; /*Declaration as set of characters ,Size 6*/

string3最后一个字符必须是 NULL (’\0’),用单引号引用。

C语言也允许无需定义字符数组的大小而初始化字符串变量。 可以通过以下方式完成:

char first_name[ ] = "NATHAN";

以下是字符串的内存表示:

数据输入输出的概念及在 C 语言中的实现

1)所谓输入输出是以计算机为主体而言的。
2) 本章介绍的是向标准输出设备显示器输出数据的语句。
3) 在C语言中,所有的数据输入/输出都是由库函数完成的。 因此都是函数语句。
4) 在使用C语言库函数时,要用预编译命令
#include
将有关“头文件”包括到源文件中。
使用标准输入输出库函数时要用到 “stdio.h”文件,因此源文件开头应有以下预编译命令:
#include< stdio.h >

#include ”stdio.h”
stdio 是 standard input &outupt 的意思。

考虑到 printf 和 scanf 函数使用频繁,系统允许在使用这两个函数时可不加
#include< stdio.h >

#include ”stdio.h”

 

 

字符串输入

在编写要求用户输入的交互式程序(人机对话)时,C提供了scanf(),gets()和fgets(), putchar (), getchar(),函数来查找从用户输入的一行文本。

getchar 函数(键盘输入函数)

getchar 函数的功能是从键盘上输入一个字符。

其一般形式为:
getchar();
通常把输入的字符赋予一个字符变量,构成赋值语句,如:
char c;
c=getchar();

例一:

#include<stdio.h>
void main()
{
 char c;
 printf("input a character\n");
 c=getchar();
 putchar(c);
} 

使用 getchar 函数还应注意几个问题:
1) getchar 函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。
2) 使用本函数前必须包含文件“stdio.h”。
3) 在 TC 屏幕下运行含本函数程序时, 将等待用户输入一个字符。显示结果后,再输入字符将会推出运行。
4) 程序最后两行可用下面两行的任意一行代替:
putchar(getchar());
printf(“%c”,getchar());

scanf()

当我们使用 scanf()进行读取时,我们使用“%s”格式,而不使用“&”访问变量地址,因为数组名称充当指针。 例如:

#include <stdio.h>
int main() {
char name[10];
int age;
printf("Enter your first name and age: \n");
scanf("%s %d", name, &age); 
printf("You entered: %s %d",name,age);
}

scanf函数的最大问题在于它从不读取整个字符串。 一旦出现空格,换页,垂直制表符,换行符或回车,它将停止读取过程。 假设我们以“zhihui xinpian”作为输入,则scanf函数将永远不会读取整个字符串,因为两个名称之间会出现空格字符。 scanf函数将仅读取zhihui。

为了读取包含空格的字符串,我们使用gets()函数。

gets函数将忽略空格。 当到达换行符时(按Enter键)它将停止读取。例如:

#include <stdio.h>
int main() {
char full_name[25];
printf("Enter your full name: ");
gets(full_name);
printf("My full name is %s ",full_name);
return 0;
}

结果

Enter your full name: zhihui xinpian
My full name is zhihui xinpian

更安全的函数是fgets(), 可以读取特定数量的字符:

#include <stdio.h>
int main() 
{
      char name[10];
      printf("Enter your  name plz: ");
      fgets(name, 10, stdin);
      printf("My name is %s ",name);
      return 0;
}

运行结果:

fgets()的参数为:

  • 字符串名称,
  • 要读取的字符数,
  • stdin表示从标准输入(这儿是键盘输入)中读取数据

字符串输出 :print/display 字符串

 

putchar 函数(字符输出函数)

putchar 函数是字符输出函数, 其功能是在显示器上输出单个字符。
其一般形式为:
putchar(字符变量)
例如:

putchar(‘A’); (输出大写字母 A)
putchar(x); (输出字符变量 x 的值)
putchar(‘\101’); (也是输出字符 A)
putchar(‘\n’); (换行)

对控制字符则执行控制功能,不在屏幕上显示。
使用本函数前必须要用文件包含命令:

#include<stdio.h>

#include “stdio.h”

例3

#include<stdio.h>
main(){
 char a='B',b='o',c='k';
 putchar(a);putchar(b);putchar(b);putchar(c);putchar('\t');
 putchar(a);putchar(b);
 putchar('\n');
 putchar(b);putchar(c);
 }

标准printf函数用于在输出设备上打印或显示字符串。 使用的格式说明符为%s

fputs() 和 printf() 函数用于字符串输出。

fputs() 函数

fputs()需要字符串的名称,和指向显示文本位置的指针。 我们使用stdout标准输出打印到屏幕上,例如:

#include <stdio.h>
int main()
{
    char town[40];
    printf("Enter your town: ");
    gets(town);
    fputs(town, stdout);
    return 0;
}

puts() 函数

puts函数在输出设备上打印字符串,然后将光标移回第一位置。 可以通过以下方式使用puts函数:

#include <stdio.h>
int main() 
{
    char name[15];
    gets(name);        //reads a string
    puts(name);        //displays a string
    return 0;
}

这样的语法非常简单。

操作字符串的函数

C 中有大量操作字符串的函数:

序号 函数 & 目的
1 strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2 strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。
3 strlen(s1);
返回字符串 s1 的长度。
4 strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
5 strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6 strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

下面的实例使用了上述的一些函数:

#include <stdio.h>
#include <string.h>
int main () 
{
    //string initialization
    char string1[15]="Hello";
    char string2[15]=" World!";
    char string3[15];
    int val;

    //string comparison
    val= strcmp(string1,string2);
    if(val==0)
    {
          printf("Strings are equal\n");
    }
    else
    {
          printf("Strings are not equal\n");
    }

    //string concatenation
    printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world!

    //string length
    printf("\nLength of first string:%d",strlen(string1));
    printf("\nLength of second string:%d",strlen(string2));

    //string copy
   printf("\nCopied string is:%s\n",strcpy(string3,string1));  //string1 is copied into string3
   return 0;
}

一些重要的字符串操作函数:

  • strncmp(str1, str2, n) : 如果str1的前n个字符等于str2的前n个字符,则返回0;如果str1 <str2,则返回0;如果str1> str2,则返回0。
  • strncpy(str1, str2, n) 此函数用于从另一个字符串复制一个字符串。 将str2的前n个字符复制到str1
  • strchr(str1, c): 它返回一个指向str1中首次出现的char c的指针,如果找不到字符,则返回NULL。
  • strrchr(str1, c): 它反向搜索str1并返回一个指向str 1中char c位置的指针;如果找不到字符,则返回NULL。
  • strstr(str1, str2): 它返回一个指向str1中首次出现的str2的指针,如果未找到str2,则返回NULL。
  • strncat(str1, str2, n) 将str2的前n个字符附加(连接)到str1的末尾,并返回指向str1的指针。
  • strlwr() :将字符串转换为小写
  • strupr() :将字符串转换为大写
  • strrev() : 反转字符串

将字符串转换为数字

在C编程中,我们可以将一串数字字符转换为一个数值,以防止运行时错误。 stdio.h库包含以下用于将字符串转换为数字的函数:

  • int atoi(str)代表ASCII到整数; 它将str转换为等效的int值。 如果第一个字符不是数字或未遇到任何数字,则返回0。
  • double atof(str)表示ASCII到浮点数,它将str转换为等效的double浮点值。 如果第一个字符不是数字或未遇到数字,则返回0.0。
  • long int atol(str)代表ASCII到长整数(long int),将str转换为等效的长整数值。 如果第一个字符不是数字或未遇到任何数字,则返回0。

范例:

#include <stdio.h>
int main()
{
     char *string_id[10];
     int ID;
     printf("Enter a number: ");
     gets(string_id);
     ID = atoi(string_id);
     printf("you enter %d  ",ID);
     return 0;
}

字符串指针声明(例如char * string =“ language”)是一个常量,无法修改

摘要:

  • 字符串是存储在字符数组中的字符序列。
  • 字符串是用双引号引起来的文本。
  • 诸如“ d”的字符不是字符串,并且用单引号引起来。
  • “ C”提供了标准的库函数来处理程序中的字符串。 字符串操纵器存储在头文件中。
  • 在用于程序之前,必须声明或初始化字符串。
  • 有不同的输入和输出字符串函数,每个函数都有其功能。
  • 不要忘记包括字符串库以使用其功能
  • 我们可以通过atoi(),atof()和atol()将字符串转换为数字,这对于编码和解码过程非常有用。
  • 我们可以通过定义一个字符串数组来操纵不同的字符串。