删除C中字符串之间的空格
Erase blank spaces between string in C
因此,我正在尝试从用户输入的字符串中删除空格 space。我已经有一个选项,程序可以在其中计算元音并反转字符串。我需要帮助的地方从 //espaços 开始。我所做的是这样的:如果 "palavra" 字符串,原始字符串,在任何 position 中都有一个 space (' '
),新字符串没有 space 将在该 pos 中包含字符串 "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] != '[=10=]'; 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] != '[=10=]'; 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);
}
保留新字符串长度 k 的计数器,检查字符是否为 space,如果是 space 则忽略它,否则递增 k 并将该字符添加到新的 [=15] =]-
int k = 0; //k will be the new string length after the loop
for (int i = 0; palavra[i] != '[=10=]'; i++)
{
if (palavra[i] != ' ')
{
palavra3[k++] = palavra[i];
}
}
palavra3[k] = '[=10=]';
这个例子也适用于多个连续 spaces 的情况。
删除for (i = 0; palavra[i] != '[=12=]'; i++);
末尾多余的;
加上无关的;
,循环为空,下面的代码执行一次i
等于strlen(palavra)
.
您可以通过使用 Kernighan 和 Ritchie 缩进样式来避免这种愚蠢的错误:将 {
放在带有 if
、for
、while
、do
或 switch
语句。这使得在控制语句及其块之间键入虚假 ;
的可能性大大降低。
要删除空格,请使用 2 指法:
//espaços
for (i = j = 0; palavra[i]; i++) {
if (palavra[i] != ' ') {
palavra3[j++] = palavra[i];
}
}
palavra3[j] = '[=10=]'; // set the null terminator
因此,我正在尝试从用户输入的字符串中删除空格 space。我已经有一个选项,程序可以在其中计算元音并反转字符串。我需要帮助的地方从 //espaços 开始。我所做的是这样的:如果 "palavra" 字符串,原始字符串,在任何 position 中都有一个 space (' '
),新字符串没有 space 将在该 pos 中包含字符串 "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] != '[=10=]'; 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] != '[=10=]'; 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);
}
保留新字符串长度 k 的计数器,检查字符是否为 space,如果是 space 则忽略它,否则递增 k 并将该字符添加到新的 [=15] =]-
int k = 0; //k will be the new string length after the loop
for (int i = 0; palavra[i] != '[=10=]'; i++)
{
if (palavra[i] != ' ')
{
palavra3[k++] = palavra[i];
}
}
palavra3[k] = '[=10=]';
这个例子也适用于多个连续 spaces 的情况。
删除for (i = 0; palavra[i] != '[=12=]'; i++);
;
加上无关的;
,循环为空,下面的代码执行一次i
等于strlen(palavra)
.
您可以通过使用 Kernighan 和 Ritchie 缩进样式来避免这种愚蠢的错误:将 {
放在带有 if
、for
、while
、do
或 switch
语句。这使得在控制语句及其块之间键入虚假 ;
的可能性大大降低。
要删除空格,请使用 2 指法:
//espaços
for (i = j = 0; palavra[i]; i++) {
if (palavra[i] != ' ') {
palavra3[j++] = palavra[i];
}
}
palavra3[j] = '[=10=]'; // set the null terminator