利用for循环遍历数组每一个元素,当遍历到空格时候,将元素从最后面再到最前面向后移一个单位,即“str[j+1] = str[j]”,然后将str[i]和str[i+1]都赋值‘#’。
代码:#define _CRT_SECURE_NO_WARNINGS #include#include #include #include void replace(char str[]); int main() { char str[18] = "i am a student"; replace(str); for (int i = 0; i < strlen(str)+1; i++) { printf("%c", str[i]); } } void replace(char str[]) { int len = strlen(str); for (int i = 0; i < len; i++) { if (str[i] ==' ') { for (int j = len; j > i; j--) { str[j+1] = str[j]; } str[i] = '#'; str[i + 1] = '#'; i++; } } }
最后少了个‘t’以为是最后遍历数组出了问题,然后遍历数组时给strlen(len)+1还是少‘t’,其实是replace()覆盖时出了问题,断点加在36行:
原来‘t’赋值给了‘’,而数组长度始终是一开始的len=strlen(str),所以在27行for循环开始条件改为int j=strlen(str),每次移动数组位置时改变数组长度即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)