1.想用这些函数都需要导入头文件
#include<string.h>
2.怎么创建字符串并输入
#define maxsize 100
char a[maxsize+1];//创建字符串,预留一个位置放'\0'
【1】scanf("%s",a);//使用 scanf 函数读取不带空格的字符串
【2】fgets(a, sizeof(a), stdin);//使用 fgets 函数读取带空格的字符串
【3】gets(a);//使用 gets 函数读取带空格的字符串(尽量不要用,会发生缓冲区溢出)
【4】getchar(a);//使用 getchar 函数逐字符读取字符串(不带空格)
3.怎么输出
【1】使用%s格式控制符输出字符串:
printf("%s", str);
【2】使用puts函数输出字符串,自动换行
puts(str);
【3】使用fputs函数输出字符串,不自动换行
fputs(str, stdout);
【4】逐个字符输出字符串
int i = 0;
while (str[i] != '\0') {putchar(str[i]);i++;
}
3.strncpy 函数和strtok() 函数
【1】strncpy函数,char *strncpy(char *dest, const char *src, size_t n);
strncpy
会从src
复制最多n
个字符到dest
,包括空字符(\0
)。如果src
的长度小于n
,则dest
将被填充空字符直到n
个字符。
【2】strtok
函数,char *strtok(char *str, const char *delim);
strtok
会根据delim
中的字符分割str
字符串,并返回分割后的第一个(或下一个)子串。每次调用strtok
后,它都会修改str
字符串,因此它是不安全的,不推荐在多线程环境中使用。
【3】代码:
#include <stdio.h>
#include <string.h>#define MAX_STRING_LENGTH 1024
#define MAX_SUBSTRINGS 100int main() {
char input[MAX_STRING_LENGTH];
char token[MAX_STRING_LENGTH];
char output[MAX_SUBSTRINGS][MAX_STRING_LENGTH] = {0};
char *context;
int substring_index = 0;
char delimiter[] = "-";// 获取输入字符串
printf("Enter a string separated by '-': ");
fgets(input, MAX_STRING_LENGTH, stdin);
input[strcspn(input, "\n")] = 0; // Remove the newline character// 使用 strtok 分割字符串
char *token_ptr = strtok(input, delimiter);
while (token_ptr != NULL) {
strncpy(token, token_ptr, MAX_STRING_LENGTH - 1); // 复制子串
token[MAX_STRING_LENGTH - 1] = '\0'; // 确保字符串以空字符结尾// 检查子串长度是否超过了数组的界限
if (strlen(token) >= MAX_STRING_LENGTH) {
printf("Error: Substring exceeds maximum length.\n");
return 1;
}// 将子串复制到输出数组中
strncpy(output[substring_index], token, strlen(token) + 1); // +1 以复制 '\0'
substring_index++;// 获取下一个子串
token_ptr = strtok(NULL, delimiter);
}// 输出结果
printf("Original substrings:\n");
for (int i = 0; i < substring_index; i++) {
printf("%s\n", output[i]);
}return 0;
}