C\C++字符串函数

正文

getch函数

Head File:

1
#include "conio.h"

功能:从控制台无回显的读取一个字符

用法:int void getch() 该函数函数经常用于交互输入的过程中完成暂停等功能

getche函数

Head File:

1
#include "conio.h"

功能:从控制台带回显的读取一个字符

用法:int void getche()

该函数函数经常用于交互输入的过程中完成暂停等功能

getchar函数

Head File

1
#include "conio.h"

功能:从控制台带回显的读取一个字符

用法:int void getchar()

该函数也是从键盘上读入一个字符, 并带回显。

它与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

1
2
for( i = 0; (ch = getchar()) != EOF && (ch!='\n'); i++ )
buffer[i] = (char)ch; // 表示读到文件结束停止!与getchar对应的还有putchar函数,此函数的作用是将getchar函数读入的内容的第一个字符显示出来。

strlen(string)

功能:用于测试字符串长度,即除字符串结束标记外的所有字符的个数。

1
2
3
4
5
6
7
8
9
10
#include "string.h"
void main( void )
{
char strBuf[100];
scanf("%s",strBuf);
printf("%s",strBuf);
int k=strlen(strBuf);
printf("\n%d",k);
getch();
}

strupr(string) / strlwr(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
printf("\n%s",strupr(strBuf));
printf("\n%s",strlwr(strBuf));
```
## `strcpy(string1,string2)`/`strncpy(string1,string2,n)` ##
功能:将"字符串""整型表达式(n)"指定的个数组成字符串存入"字符串"中,若省略"n",则将整个"字符串"存入数字中
注意:在使用函数`strncpy`时,如果按整形表达式来复制时,会出现"`....烫烫烫烫烫烫...`"主要是因为复制后字符串`str1`不是以'\0'结尾,此时需要手动将字符串结束符号加入。
```c++
#include <stdio.h>
#include "string.h"
void main( void )
{
char strBuf1[100],strBuf2[100],strBuf3[100];
scanf("%s",strBuf1);
gets(strBuf1);
strcpy(strBuf2,strBuf1);
strncpy(strBuf3,strBuf1,3);
strBuf3[3]='\0';
printf("strBuf2:%s",strBuf2);
printf("\nstrBuf3:%s",strBuf3);
}

getcmp(string1,string2)/getncmp(string1,string2,n)

功能:getcmp表示比较两个字符串,getncpy表示比较两个字符串的前n位,若为缺省表示和strcmp函数相同

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
#include "string.h"
#include "stdio.h"
void main()
{
int m;
int n;
char strArr1[80],strArr2[80];
puts("please input the first string:");
gets(strArr1);
puts("please input the first string:");
gets(strArr2);
m=strcmp(strArr1,strArr2);
printf("\nstrcmp() returns %d",m);
n=strncmp(strArr1,strArr2,2);
printf("\nstrncmp() returns %d",n); //cout字符串string2中的前n位连接到string1中,结果存在string1。
#include "string.h"
void main()
{
char str1[100],str2[100];
puts("input string1:");
gets(str1);
puts("input string2:");
gets(str2);
strcat(str1,str2);
strncat(str1,str2,3);
puts(str1);
}

下面是C/C++面试时遇到的一些题目

不调用C library实现字符串的复制功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdio.h"
#include "iostream"
using namespace std;
char *strcpy1(char *, const char *);
void main()
{
char strD[20];
const char *strS="woshishui";
strcpy1(strD,strS);
printf("%s",strD);
}
char *strcpy1(char *strDess, const char *strSrss)
{
char *address=strDess;
while((*strDess++ = *strSrss++ )!='\0');
return address;
}

请写一个函数来模拟C++中的strstr()

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
//strstr函数的功能是把主串中子串以及以后的字符全部返回。不调用库函数,实现此功能。
#include "stdio.h"
#include "string.h"
const char *strstr1(const char *hostStr,const char *subStr);
void main()
{
char *str=strstr("1234567","345");
printf("%s",str);
char *string1="1234567";
char *string2="345";
strstr1(string1,string2);
printf("%s",strstr1(string1,string2));
}
const char *strstr1(const char *hostStr,const char *subStr)
{
for (int i=0;hostStr[i]!='\0';i++)
{
int j=0;
int temp=i;
if (hostStr[i]==subStr[j])
{
while (hostStr[i++]==subStr[j++])
{
if(subStr[j]=='\0')
return &hostStr[i-j];
}
i=temp;
}
}
return NULL;
}

热评文章