将一个字符串(串长不超过50)中连续的空格符只保留一个。例如,若字符串为“I am a student.",处理后为"I am a student."
#include <stdio.h>
int main()
{
char str[50];
int i, j;
char last_char = 'a';
fgets(str, sizeof(str), stdin);
for (i = 0, j = 0; str[i] != '\0'; i++) {
if (str[i] != ' ' || last_char != ' ') {
str[j] = str[i];
j++;
}
last_char = str[i];
}
str[j] = '\0';
printf("%s", str);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void reverse(char arr[], int left, int right){
int temp = 0;
while (left < right){
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
int main(){
char arr[] = "student a am i";
printf("初始字符串为:%s\n", arr);
int i = 0;
int left = 0, right = 0;
int len = strlen(arr) - 1;
reverse(arr, 0, len); //交换整个字符串
while (i < len){
if (arr[i] != ' '){ //判定在遇到空格
left = i;
while (arr[i] && arr[i] != ' '){ //arr[i]存在且不是空格
i++; //一直加到第一个单词的最后一个字母
}
right = i - 1;
}
char temp = 0;
while (left < right){
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
} //交换每个单词的字母
i++;
}
printf("改变后的字符串为:%s\n", arr);
system("pause");
return 0;
}