所以,我试图从用户的sting输入中删除空白空格 . 我已经有一个选项,程序计算元音并反转字符串 . 我需要帮助的那个从//espaços开始 . 我所做的是这样的:如果"palavra"字符串(原始字符串)在任何位置都有一个空格( ' '
),那么没有空格的新字符串将在该位置具有字符串"palavra"的下一个字符:
/*palavra = " o l a _ o l a"
[0][1][2][3][4][5][6]
palavra3 = "o l a o l a"
[0][1][2][3][4][5]*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(void) {
char palavra[10];
char palavra2[10];
char palavra3[10];
int i;
int vogais = 0;
int j;
int k;
int espaco = 0;
printf("Introduza uma string: \n");
scanf("%[^\n]", palavra);
//vogais
for (i = 0; palavra[i] != '\0'; i++) {
if (palavra[i] == 'a' || palavra[i] == 'e' || palavra[i] == 'i' ||
palavra[i] == 'o' || palavra[i] == 'u' ||
palavra[i] == 'A' || palavra[i] == 'E' || palavra[i] == 'I' ||
palavra[i] == 'O' || palavra[i] == 'U')
vogais ++;
// else
// printf("");
}
printf("Vogais: %i", vogais);
//invertida
for (i = 0; palavra[i] != '\0'; i++);
{
k = i-1;
}
for (j = 0; j <= i-1; j++) {
palavra2[j] = palavra[k];
k--;
}
printf("\nString invertida: %s", palavra2);
//espaços
for (i = 0; palavra[i]; i++) {
if (palavra[i] == ' ')
palavra3[i] = palavra[i + 1];
//espaco++;
}
// printf("\nNumero de espacos: %i", espaco);
printf("\nString sem espacos: %s", palavra3);
}
2 回答
删除
for (i = 0; palavra[i] != '\0'; i++);
末尾的额外;
对于无关的
;
,循环为空,以下代码执行一次,i
等于strlen(palavra)
.你可以使用Kernighan和Ritchie缩进样式来避免这种愚蠢的错误:将
{
放在行的末尾if
,for
,while
,do
或switch
语句 . 这使得在控制语句及其块之间输入虚假;
的可能性大大降低 .要删除空格,请使用2指方法:
保持新字符串长度为k的计数器,检查字符是否为空格,如果是空格则忽略它,否则增加k并将该字符添加到新字符串中 . 示例 -
此示例也适用于多个连续空格的情况 .