一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情。
字符串处理函数示例
字符数组应用举例
1. 输入一行字符,统计其中有多少个单词,单词之间用空格隔开。
思路: 关键:怎样确定“出现一个新单词了” 方法:从第1个字符开始逐个字符进行检查,判定此字符是否是新单词的开头,如果是,就使变量num的值加1(用num统计单词数),最后得到的num的值就是单词总数 判定是否是新单词:可以由是否有空格出现来决定(连续的若干个空格作为出现一次空格,一行开头的空格不统计在内)
- 如果测出某一个字符非空格,而它的前面的字符是空格,则表示“新的单词开始了”,此时num累加1
- 如果当前字符为非空格,而它的前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不累加
- 用变量word作为判别当前是否开始了一个新单词的标志
- 若word=0,表示未出现新单词
- 如果出现了新单词,就把word置为1
// 5.输入一行字符,统计其中有多少个单词,单词之间用空格隔开。
char string[81];
int i, num = 0, word = 0;
char c;
gets(string); // 输入一个字符串给字符数组string
for (i= 0; (c=string[i]) != '\0'; i++) { // 只要字符不是'\0'就继续执行循环
if (c == ' ') word = 0; // 如果是空格字符,使word置为0
else if (word == 0) { // 如果不是空格字符且word原始值为0,word置为1,num累加(表示增加一个单词)
word = 1;
num++;
}
}
printf("There are %d words in this line. \n", num); // 输出单词数
2. 有3个字符串,要求找出其中“最大”者
思路: 可以设一个二维的字符数组str,大小为3X20,即有3行20列(每一行可以容纳20个字符)
- str[0], str[1], str[2]看作3个一维字符数组(他们各有20个元素)
- gets函数分别读入3个字符串,赋给3个一维数组
- 然后经过3次两两比较,就可以得到值最大者,把它放在一维字符数组string中
// 6. 有3个字符串,要求找出其中“最大”者
char str[3][20]; // 定义一个二维数组
char string[20]; // 定义一个一维数组,作为交换字符串数组时的临时字符数组
int i;
for (i = 0; i < 3; i++) {
gets(str[i]); // 读入3个字符串,分别赋给str[0], str[1], str[2]
}
if (strcmp(str[0], str[1]) > 0) { // 若str[0] > str[1], 则将str[0]的值赋给string, 否则将str[1]赋给string
strcpy(string, str[0]);
} else {
strcpy(string, str[1]);
}
if (strcmp(str[2], string) > 0) { // 同上
strcpy(string, str[2]);
}
printf("\n the largest string is: \n %s\n", string); // 输出string