所谓的字符串数组,其实就是个二维的字符数组
char tracks[][80] = {
"I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima",
};
- // []-->第一对方括号用来访问由所有字符串组成的数组,编译器可以识别你有5个字符串,因此括号里可以不写数字。
- // [80]-->第二对方括号用来访问每个单独的字符串,歌名不得超过79个字符,所以将这个值设为80
为了找到某一首歌的名字,可以这样写:
tracks[4] --> "The girl from Iwo Jima"
如果想读取字符串中的某个字符,可以这样写:
tracks[4][6] --> 'r' // 这是第5个字符串中第7个字符
使用string.h头文件
c标准库中处理字符串的代码都包含在string.h这个头文件中,你只需把string.h加在程序的顶端,
就像你包含stdio.h那样,就可以调用里面的函数了。
#include <stdio.h> // 主要处理输入输出
#include <string.h> // 主要处理字符串
主要函数:
比如你想查看strstr()函数,可以输入:man strstr
使用strstr()函数
// 函数会在第一个字符串里寻找第二个字符串,
// 如果找到会返回第二个字符串在存储器中的位置
// 如果没找到则返回0
strstr("dysfunctional", "fun");
代码示例:
#include <stdio.h>
#include <string.h>
- //把tracks数组放在全局域。全局变量位于任何函数之外,所有函数都可以调用它们。
char tracks[][80] = {
"I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima"
};
// find_track()必须赶在你在main()中调用它之前出现,否则会警告冲突
- // 从tracks字符串数组中找到输入的字符串所在的那个字符串
void find_track(char search_for[]){
int i;
for(i = 0; i<5;i++){
if(strstr(tracks[i],search_for)){
printf("Track %i: '%s'\n",i,tracks[i]);
}
}
}
int main(){
- char search_for[80];
printf("search_for:");
fgets(search_for,sizeof(search_for),stdin);
search_for[strlen(search_for)-1] = '\0';
find_track(search_for);
return 0;
}
运行结果:
#include <stdio.h>
#include <string.h>
//反转字符串
void print_reverse(char *s) {
- // 先计算出字符串的长度,size_t相当于整型,用来保存字符串的长度
size_t len = strlen(s);
// 先把指针移到字符数组最后一位
char *t = s+len-1 ;
// 然后再依次反向移动
while( t >= s) {
printf("%c",*t);
t = t-1; //像这样计算地址就叫 指针算术运算
}
puts("");
}
int main() {
char search_for[80];
printf("search_for:");
fgets(search_for,sizeof(search_for),stdin);
search_for[strlen(search_for)-1] = '\0';
print_reverse(search_for);
return 0;
}
运行结果:
char *names_for_dog[] = { "Bowser", "Bonza", "Snodgrass"};
char *a = names_for_dog[0];
char *b = names_for_dog[1];
char *c = names_for_dog[2];