第一题很简单,纯练手
void reverseString(char* s, int sSize) {
int left = 0;
int right= sSize-1;
while(left<right)
{
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
第二题也做过
int len = strlen(s);
for (int i = 0; i < len; i += (2 * k)) {
//判断剩余字符是否少于 k
k = i + k > len ? len - i : k;
int left = i;
int right = i + k - 1;
while (left < right) {
char temp = s[left];
s[left++] = s[right];
s[right--] = temp;
}
}
return s;
替换数字
54. 替换数字(第八期模拟笔试) (kamacoder.com)
亮点在于 后序填充,可以不用开辟额外的空间
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char s[10000]; // 假设输入的字符串不会超过1023个字符
int sOldIndex, sNewIndex;
int count = 0; // 统计数字的个数
while (scanf("%1023s", s) == 1) {
sOldIndex = strlen(s) - 1;
for (int i = 0; i <= sOldIndex; i++) {
if (s[i] >= '0' && s[i] <= '9') {
count++;
}
}
// 计算新字符串的长度
int newLength = strlen(s) + count * 5;
char *newS = (char *)malloc(newLength + 1); // 为新字符串分配内存
if (!newS) {
fprintf(stderr, "Memory allocation failed.\n");
return 1;
}
newS[newLength] = '\0'; // 确保字符串以空字符结尾
sNewIndex = newLength - 1;
while (sOldIndex >= 0) {
if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
newS[sNewIndex--] = 'n';
newS[sNewIndex--] = 'u';
newS[sNewIndex--] = 'm';
newS[sNewIndex--] = 'b';
newS[sNewIndex--] = 'e';
newS[sNewIndex--] = 'r';
} else {
newS[sNewIndex--] = s[sOldIndex];
}
sOldIndex--;
}
free(newS); // 释放分配的内存
}
return 0;
}