1.scanf("%s",str);分隔符为空格、制表符、回车
2.fgets(str,10,stdin);10为字符串char str[10]长度,可以读取空格字符的字符串,10代表最大读取长度,最多读取9个字符,这个函数自动在读取到换行符停止,删除\n才能正确输出
str[strlen(str)-1]='\0';
printf("%s\n",str);
1.printf("%s\n",str);
2.puts(str);自动在末尾加上\n,不支持格式化输出
char arr[size];
arr[0]='H';
arr[1]='e';
arr[2]='l';
arr[3]='l';
arr[4]='o';
arr[5]='\0';
char str[]="Hello,world!";
str[0]='h';
char str[]={'H','e','l','l','o','!','\0'};
char arr[13]="Hello,world!";
char *str=arr;
strlen(str);获取字符串长度
strcmp(str1,str2);比较两个字符串是否相等
strcpy(dest,src);将源字符串复制到目标字符串中
strcat(dest,src);将源字符串加入到目标字符串末尾
例题1
给你两个字符串?
a
?和?b
,请返回?这两个字符串中?最长的特殊序列??的长度。如果不存在,则返回?-1
?。「最长特殊序列」?定义如下:该序列为?某字符串独有的最长子序列(即不能是其他字符串的子序列)?。
字符串?
s
?的子序列是在从?s
?中删除任意数量的字符后可以获得的字符串。
- 例如,
"abc"
?是?"aebdc"
?的子序列,因为删除?"aebdc"
?中斜体加粗的字符可以得到?"abc"
?。?"aebdc"
?的子序列还包括?"aebdc"
?、?"aeb"
?和?""
?(空字符串)。示例 1:
输入: a = "aba", b = "cdc" 输出: 3 解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。示例 2:
输入:a = "aaa", b = "bbb" 输出:3 解释: 最长特殊序列是 "aaa" 和 "bbb" 。示例 3:
输入:a = "aaa", b = "aaa" 输出:-1 解释: 字符串 a 的每个子序列也是字符串 b 的每个子序列。同样,字符串 b 的每个子序列也是字符串 a 的子序列。提示:
1 <= a.length, b.length <= 100
a
?和?b
?由小写英文字母组成
要解决这个问题,我们需要理解什么是特殊序列。
根据题目的定义,最长特殊序列是某个字符串独有的最长子序列,即不能是其他字符串的子序列。
我们可以按照以下思路来解决这个问题:
- 如果字符串 a 和字符串 b 相等,那么它们没有特殊序列,返回 -1。
- 否则,返回两个字符串长度的较大值,因为每个字符串本身就是它们自己的特殊序列,而不可能是对方的子序列。
在上述代码中,我们定义了一个函数 `findLUSlength` 来计算最长特殊序列的长度。在 `main` 函数中,我们给出了示例输入,然后调用 `findLUSlength` 函数来计算最长特殊序列的长度,并输出结果。
#include <stdio.h>
#include <string.h>
int findLUSlength(char *a, char *b) {
int lenA = strlen(a);
int lenB = strlen(b);
if (strcmp(a, b) == 0) {
return -1;
}
return lenA > lenB ? lenA : lenB;
}
int main() {
char a[] = "aba";
char b[] = "cdc";
int result = findLUSlength(a, b);
printf("最长特殊序列的长度为:%d\n", result);
return 0;
}
例题2
URL化。编写一种方法,将字符串中的空格全部替换为
%20
。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java
实现的话,请使用字符数组实现,以便直接在数组上操作。)示例 1:
输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith"示例 2:
输入:" ", 5 输出:"%20%20%20%20%20"提示:
- 字符串长度在 [0, 500000] 范围内。
?解法1:自己写的,但是超时了
#include <stdio.h>
#include <string.h>
char* replaceSpaces(char* S, int length) {
int i = 0;
for (i = 0; i < length; i++) {
if (S[i] == ' ') {
S[i] = '%';
int j=0;
for(j=length-1;j>i;j--)
{
S[j+2]=S[j];
}
S[i+1] = '2';
S[i+2] = '0';
i += 2; // 跳过已替换的字符
length += 2;
S[length]='\0';
}
}
return S;
}
int main() {
char str[50000];
fgets(str, sizeof(str), stdin);
str[strlen(str) - 1] = '\0';
printf("%s\n", replaceSpaces(str, strlen(str)));
return 0;
}
解法2:未超时
#include <stdio.h>
#include <string.h>
char* replaceSpaces(char* S, int length) {
int spaceCount = 0;
int i=0;
for (i = 0; i < length; i++) {
if (S[i] == ' ') {
spaceCount++;
}
}
int newLength = length + 2 * spaceCount;
int newIndex = newLength - 1;
for (i = length - 1; i >= 0; i--) {
if (S[i] == ' ') {
S[newIndex] = '0';
S[newIndex - 1] = '2';
S[newIndex - 2] = '%';
newIndex -= 3;
} else {
S[newIndex] = S[i];
newIndex--;
}
}
S[newLength]='\0';
return S;
}
int main() {
char str[50000];
fgets(str, sizeof(str), stdin);
str[strlen(str) - 1] = '\0';
printf("%s\n", replaceSpaces(str, strlen(str)));
return 0;
}
例题3
给你一个坐标?
coordinates
?,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。如果所给格子的颜色是白色,请你返回?
true
,如果是黑色,请返回?false
?。给定坐标一定代表国际象棋棋盘上一个存在的格子。坐标第一个字符是字母,第二个字符是数字。
示例 1:
输入:coordinates = "a1" 输出:false 解释:如上图棋盘所示,"a1" 坐标的格子是黑色的,所以返回 false 。示例 2:
输入:coordinates = "h3" 输出:true 解释:如上图棋盘所示,"h3" 坐标的格子是白色的,所以返回 true 。示例 3:
输入:coordinates = "c7" 输出:false提示:
coordinates.length == 2
'a' <= coordinates[0] <= 'h'
'1' <= coordinates[1] <= '8'
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool squareIsWhite(char* coordinates) {
if (coordinates[0] == 'a' || coordinates[0] == 'c' || coordinates[0] == 'e' || coordinates[0] == 'g') {
int num = coordinates[1] - '0';
if (num % 2 == 0) {
return true;
} else {
return false;
}
} else if (coordinates[0] == 'b' || coordinates[0] == 'd' || coordinates[0] == 'f' || coordinates[0] == 'h') {
int num = coordinates[1] - '0';
if (num % 2 == 0) {
return false;
} else {
return true;
}
} else {
return false;
}
}
int main() {
char str[3];
scanf("%2s", str);
str[2] = '\0';
if (squareIsWhite(str)) {
printf("true\n");
} else {
printf("false\n");
}
return 0;
}