sprintf 和 sscanf 函数
可以使用 sprintf() 函数创建格式化的字符串。这对于用其他数据类型来构建字符串很有用。
例如:
#include <stdio.h>
int main()
{char info[100];char dept[ ] = "HR";int emp = 75;sprintf(info, "The %s dept has %d employees.", dept, emp);printf("%s\n", info);return 0;
}
尝试一下
结果是:
The HR dept has 75 employees.
另一个有用的函数是 sscanf(),用于扫描字符串中的值。
该函数从字符串中读取值,并将其存储在相应的变量地址中。
例如:
#include <stdio.h>
int main()
{char info[ ] = "Snoqualmie WA 13190";char city[50];char state[50];int population;sscanf(info, "%s %s %d", city, state, &population);printf("%d people live in %s, %s.", population, city, state);return 0;
}
尝试一下
结果是:
13190 people live in Snoqualmie, WA.
【单选题】以下哪一项是用于从其他数据类型构建字符串?
sprintf
stdio
printf
string.h库
string.h库包含许多字符串函数。
程序顶部使用语句#include <string.h>使您可以访问以下内容:
strlen(str) 返回存储在str中的字符串的长度,不包括NULL字符。
strcat(str1, str2) 将str2追加(连接)到str1的末尾,并返回指向str1的指针。
strcpy(str1, str2) 将str2复制到str1。此功能对于为字符串分配新值很有用。
下面的程序演示了string.h函数:
#include <stdio.h>
#include <string.h>int main()
{char s1[ ] = "The grey fox";char s2[ ] = " jumped.";strcat(s1, s2);printf("%s\n", s1);printf("Length of s1 is %d\n", strlen(s1));strcpy(s1, s2);printf("s1 is now %s \n", s1);return 0;
}
运行结果:
The grey fox jumped.
Length of s1 is 20
s1 is now jumped.
其他的string.h函数包括:
strncat(str1, str2, n) 将str2的前n个字符追加(连接)到str1的末尾,并返回指向str1的指针。
strncpy(str1, str2, n) 将str2的前n个字符复制到str1。
strcmp(str1, str2) 当str1等于str2时返回0,在 str1 <str2 时返回小于0,在 str1> str2 时返回大于0。
strncmp(str1, str2, n) 当str1的前n个字符等于str2的前n个字符时,返回0;当str1 <str2时,小于0;当str1> str2时,大于0。
strchr(str1, c) 返回指向str1中首次出现的char c的指针,如果找不到字符,则返回NULL。
strrchr(str1,c) 反向搜索str1并返回一个指向char c在str1中位置的指针;如果找不到字符,则返回NULL。
strstr(str1,str2) 返回指向str1中首次出现的str2的指针,如果未找到str2,则返回NULL。
【选词填空】输入代码包含字符串函数的头文件:
include<.h>
#
stdio
string
$
将字符串转换为数字
将数字字符串转换为数值是C编程中的常见任务,通常用于防止运行时错误。
读取字符串比期望数值更容易出错,用户可能不小心键入“ o”而不是“ 0”(零)。
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 input[10];int num;printf("Enter a number: ");gets(input);num = atoi(input);return 0;
}
注意,atoi() 缺少错误处理,如果要确保已完成正确的错误处理,建议使用strtol()。
【选词填空】将字符串转换为整数:
char str_num[] = "123";
int num = (str_num);
printf("%d", num);
toint
atoi
strtoint
字符串数组
二维数组可用于存储相关的字符串。
以下语句,该语句声明一个包含3个元素的数组,每个元素包含15个字符:
char trip[3][15] = {"suitcase","passport","ticket"
};
尽管字符串长度有所不同,但必须声明一个足够大的大小以容纳最长的字符串。另外,访问这些元素可能非常麻烦。
引用trip[0]表示“suitcase”容易出错。相反,您必须将[0][0]处的元素视为“ s”,将[2] [3]处的元素视为“ k”,依此类推。
处理相关字符串集合的一种更简单,更直观的方法是使用指针数组,如以下程序所示:
char *trip[ ] = {"suitcase",因为每个元素的长度都可以变化,所以与二维网格结构相比,字符串指针数组的结构更加参差不齐。"passport","ticket"
};printf("Please bring the following:\n");
for (int i = 0; i < 3; i++) {printf("%s\n", trip[ i ]);
}
因为每个元素的长度都可以变化,所以与二维网格结构相比,字符串指针数组的结构更加参差不齐。
使用这种方法,字符串长度没有限制。更重要的是,可以通过指向每个字符串的第一个字符的指针来引用项目。
请记住,像 char * items [3]; 这样的声明;仅保留三个指针的空间;这些指针引用了实际的字符串。
【选词填空】声明字符串数组:
*names = {
"John",
"Jill",
"Janet"
};
{}
char
[]
()