字符串

字符串的存储(含空格)

利用getchar()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*--存入字符串1--*/
int main()
{
char string[100];
char ch;
int i = 0;

while ((ch = getchar()) != '\n')//利用getchar()一个个导入
{
string[i] = ch;
i++;
}
string[i] = '\0';//getchar获取的字符串需要自己在尾部接入'\0',较为麻烦

for (int i = 0; string[i] != '\0'; i++)
{
putchar(string[i]);
}
putchar('\n');
return 0;
}

gets()

1
2
3
4
5
6
7
8
9
10
/*--存入字符串2--*/
int main()
{
char string[100];
char ch;
int i = 0;
gets(string);//运用gets()函数,自动在最后补上'\0'
puts(string);
return 0;
}

模拟实现strlen()函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*模拟实现strlen*/
void my_strlen(char* str)//不计算'\0'
{
int i = 0;
while(str[i]!='\0')
{
i++;
}
printf("%d", i);
}

int main()
{
char string[100];
gets(string);
my_strlen(string);
}

字符串的高级处理

字符串的比对

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*模拟实现strlen*/
int my_strlen(char* str)
{
int i = 0;
while(str[i]!='\0')
i++;
return i;
}

/*搜索比较函数*/
int strindex(char* str, char* key)
{
int end = my_strlen(str) - my_strlen(key);//明确需要循环比较的次数(如果key过长可以减少比较次数)
if (end >= 0)
{
for (int i = 0; i <= end; i++)//确定第一层比较的次数
{
for (int j = i; str[j] == key[j-i]; j++)//在第一层比较的基础上锁定后续多层的比对
{
if (key[j - i+1] == '\0')//判定key是否完全比对
{
return i+1;//最终呈现结果为找出str中的序数而不是下标
}
}
}
}
return -1;
}

/*主函数*/
int main()
{
/*获取字符串*/
int len = 0;
char str[100];
gets(str);
char key[10];
gets(key);

/*功能函数*/
int index=strindex(str, key);

printf("%d", index);

字符串的分割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*token分割单词*/
int sentoken(char* sentence, char* token,int pos)
{
//去除无效内容
int cur = pos;
while (sentence[cur] == ' ')
{
cur++;
}

/*获取token*/
if (sentence[cur] != '\0')//判断sentence是否结束
{
int count = 0;
while (sentence[cur] != '\0' && sentence[cur] != ' ')//while的结束条件:完整地获取一个单词
{
token[count] = sentence[cur];
cur++;
count++;
}
token[count] = '\0';
return cur;
}
else
return -1;
}

/*主函数*/
int main()
{
char sentence[1000];
char token[20];
gets(sentence);
int pos=0;

while ((pos = sentoken(sentence, token, pos)) != -1)
{
printf("%s\n", token);
}
}