Remplacer plusieurs espaces par un seul espace dans C
Je veux repace plusieurs espaces dans une chaîne de caractères par un seul espace, mais mon code ne fonctionne pas. Quelle est la logique d'erreur?
#include<stdio.h>
#include<string.h>
main()
{
char input[100];
int i,j,n,z=0;
scanf("%d",&n);
z=n;
for(i=0;i<n;i++)
scanf("%c",&input[i]);
for(i=0;i<n;i++)
{
if(input[i]==' ' && (input[i+1]==' ' || input[i-1]==' '))
{
--z;
for(j=i;j<n;j++)
input[j]=input[j+1];
}
}
for(i=0;i<z;i++)
printf("%c",input[i]);
printf("\n");
}
scanf
fait quelques question. Au lieu d'utiliser gets
OU scanf("%s",input)
.mal
if(input[i]==' ' && (input[i+1]==' ' || input[i-1]==' '))
quoi de mal?
voir un exemple de code de ma réponse
s'il vous plaît ne pas suggérer
gets()
. Il est impossible de facile et en toute sécurité n'est plus (depuis 2011) dans le C Standard. Suggérer fgets()
qui est tout à fait raisonnable pour la lecture interactive de la saisie de l'utilisateur.
OriginalL'auteur Jaskaran S.P | 2013-05-28
Vous devez vous connecter pour publier un commentaire.
La
scanf
est de vous donner quelques problème: il lit le\n
vous donner après la saisie de la longueurn
. Ainsi, vous n'aurez pas le dernier caractère depuisfor
boucle s'arrête. Le déjà donné les réponses sont assez bonnes. Mais si vous souhaitez suivre votre propre logique, essayez ceci:OriginalL'auteur raj raj
Je voudrais faire quelque chose comme ceci:
Bien sûr, la fonction ci-dessus vous demande de bien mettre fin à la chaîne, ce qui vous n'avez pas.
Ce que la fonction ci-dessus, est essentiellement de copier la chaîne d'elle-même. L'exception, c'est quand il y a un espace, lorsque plusieurs espaces sont tout simplement jetés.
Depuis la fonction modifie la chaîne source, il ne peut pas être utilisé sur les littéraux de chaîne.
OriginalL'auteur Some programmer dude
if(input[i]==' ' && (input[i+1]==' ' || input[i-1]==' '))
cas "1 3" : lorsque i == 0 accses d'entrée[i-1] Hors des Limites du terrain
scanf("%d",&n);
restent saut de ligne (entrée[0] <-- '\n')
fixer à
scanf("%d%*c",&n);
to[-1]
introduit laspc
drapeau pour éviter séquence de gamme.Je vous remercie. Fixe.
OriginalL'auteur BLUEPIXY
OriginalL'auteur alex440
Vous ne pouvez pas essayer ce code simple:
OriginalL'auteur Evgeniy Volkogon
Vous devez corriger les erreurs suivantes pour la boucle. la limite de votre pour la boucle doit être
z
et pasn
par
BTW: le poing charachter obtenir par votre
scanf()
(lire charachters) est de retour à la ligne (\n
). cette nouvelle ligne proviennent de la premièrescanf()
de décimales(%d
)OriginalL'auteur MOHAMED
Pourquoi faire plus compliqué qu'il doit être? Vous pouvez utiliser
strtok
pour vérifier unique d'espaces et d'ignorer ceux. Ensuite, vous pouvez utiliserstrcat
pour concaténer la chaîne dans une phrase complète, et puis vous avez terminé.C'est la façon dont je l'ai fait:
OriginalL'auteur Linus
OriginalL'auteur rov.er