344. 反转字符串
void reverseString(char* s, int sSize) {
int tmp;
for (int i = 0, j = sSize-1; i < j; i++, j--) {
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
541. 反转字符串 II
void reverse(char *s, int i, int j) {
while (i < j) {
int tmp = s[i];
s[i] = s[j];
s[j] = tmp;
i++, j--;
}
return;
}
char* reverseStr(char* s, int k) {
int n = strlen(s);
int i;
for (i = 0; i+2*k <= n; i+=2*k) {
reverse(s, i, i+k-1);
}
if (i < n) {
if (n-i <= k) {
reverse(s, i, n-1);
} else {
reverse(s, i, i+k-1);
}
}
return s;
}
54. 替换数字(第八期模拟笔试)
题意
将字符串中的数字替换为number
解
#include <stdio.h>
int main() {
char str[50005];
int k = 0;
memset(str, 0, sizeof(str));
scanf("%s\n", str);
for (int i = 0; i < strlen(str); i++) {
if (str[i] - '0'>= 0 && str[i] - '0' <= 9) {
k++;
}
}
k = strlen(str) + k*5 - 1;
for (int i = strlen(str)-1; i >= 0; i--) {
if (str[i] - '0'>= 0 && str[i] - '0' <= 9) {
str[k--] = 'r';
str[k--] = 'e';
str[k--] = 'b';
str[k--] = 'm';
str[k--] = 'u';
str[k--] = 'n';
} else {
str[k--] = str[i];
}
}
printf("%s\n", str);
return 0;
}
151. 反转字符串中的单词
题意
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
示例 1:
输入:s = “the sky is blue”
输出:“blue is sky the”
示例 2:
输入:s = " hello world "
输出:“world hello”
解释:反转后的字符串中不能存在前导空格和尾随空格。
示例 3:
输入:s = “a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
解
void reverse(char *s, int left, int right) {
while (left < right) {
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++, right--;
}
}
char* reverseWords(char* s) {
int left = 0, right = strlen(s)-1;
int j;
reverse(s, left, right);
for (int i = 0; i <= right; i++) {
for (j = i+1; j <= right; j++) {
if (s[j] == ' ') break;
}
reverse(s, i, j-1);
i = j;
}
int k = 0;
int flag = 0;
for (int i = 0; i <= right; i++) {
while (flag == 0 && s[i] == ' ') i++;
flag = 1;
if (s[i] == ' ') {
while (i < right && s[i+1] == ' ') i++;
if (i == right) break;
}
s[k++] = s[i];
}
s[k] = 0;
printf("%s\n", s);
return s;
}
55. 右旋字符串(第八期模拟笔试)
题意
将一个字符串的后k位,反转到字符串开头
输入示例
2
abcdefg
输出示例
fgabcde
解
类似541. 反转字符串 II
, 连续反转两次就是原来的字符串
#include <stdio.h>
void reverse(char * str, int i, int j) {
char tmp;
while (i < j) {
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++, j--;
}
}
int main() {
char str[10005];
int k, n;
memset(str, 0, 10005);
scanf("%d\n", &k);
scanf("%s\n", str);
n = strlen(str);
reverse(str, 0, n-1);
reverse(str, 0, k-1);
reverse(str, k, n-1);
printf("%s\n", str);
return 0;
}