保定比较好的网站建设公司,泰州专业网站建设公司,内蒙古建筑培训网,做公司网站建设价格低一、字符串输入
1.scanf(%s,str);分隔符为空格、制表符、回车
2.fgets(str,10,stdin);10为字符串char str[10]长度#xff0c;可以读取空格字符的字符串#xff0c;10代表最大读取长度#xff0c;最多读取9个字符#xff0c;这个函数自动在读取到换行符停止%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 *strarr;
五、标准库函数
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 100a 和 b 由小写英文字母组成 要解决这个问题我们需要理解什么是特殊序列。 根据题目的定义最长特殊序列是某个字符串独有的最长子序列即不能是其他字符串的子序列。 我们可以按照以下思路来解决这个问题 如果字符串 a 和字符串 b 相等那么它们没有特殊序列返回 -1。否则返回两个字符串长度的较大值因为每个字符串本身就是它们自己的特殊序列而不可能是对方的子序列。 在上述代码中我们定义了一个函数 findLUSlength 来计算最长特殊序列的长度。在 main 函数中我们给出了示例输入然后调用 findLUSlength 函数来计算最长特殊序列的长度并输出结果。 #include stdio.h
#include string.hint 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化 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 j0;for(jlength-1;ji;j--){S[j2]S[j];} S[i1] 2;S[i2] 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.hchar* replaceSpaces(char* S, int length) {int spaceCount 0;int i0;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 2a coordinates[0] h1 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;
}