10-3. Orden inverso de cadenas (15)
Ingrese una cadena, invierta la cadena y genere la cadena invertida.
Formato de entrada:
La entrada proporciona una cadena no vacía de no más de 80 caracteres de longitud en una línea, terminada con un retorno de carro.
Formato de salida:
Genere la cadena invertida en una línea.
Ejemplo de entrada:
#include<stdio.h>
#include<string.h>
char s[81];
int main(void)
{
gets(s);
char *p=s;
while(*(p+1)!='\0')//挪到最后一位
{
p ++;
}
//挨个打印
while(1)
{
printf("%c",*p);
p --;
if(p==s)
{
printf("%c",*p);
break;
}
}
}
10-4 Rotación de cuerda hacia la izquierda (20)
Ingrese una cadena y un número entero no negativo N, y es necesario desplazar circularmente la cadena hacia la izquierda N veces.
Formato de entrada:
La entrada se proporciona en la línea 1 como una cadena no vacía de no más de 100 caracteres de longitud y termina con un retorno de carro; la línea 2 se proporciona como un número entero no negativo N.
Formato de salida:
Genere la cadena girada hacia la izquierda N veces en una línea.
Ejemplo de entrada:
#include<stdio.h>
#include<string.h>
char s[101];
int main(void)
{
//控制台输入 s和 N
gets(s);
int n;
scanf("%d",&n);
int i,k;
char s1[101];
strcpy(s1,s);//s1=strcpy(s1,s) 会报错!!
//分割 前面 he
{
char *p=s1;
p[n]='\0';
printf("此时s1=%s\n",s1);
}
//分割 后半段
{
char *q=s;
k=strlen(s);
for(i=0;i<=k-n;i++)
{
q[i]=q[i+n];
}
q[i]='\0';
printf("此时s=%s\n",s);
}
//连接
strcat(s,s1);
printf("最后s=%s\n",s);
}
Desplazar cadena hacia la izquierda
k=strlen(s);
for(i=0;i<=k-n;i++)
{
q[i]=q[i+n];
}
q[i]='\0';
de otra manera
#include <stdio.h>
#include <string.h>
char str[103];
int main()
{
int i, k, n;
gets(str);
k = strlen(str);
scanf("%d", &n);
if ( n % k == 0 )
puts(str);
else
{
for ( i=n%k; i<k; i++ )//i=2%12 i=2 从第二位开始打印
{
printf("%c", str[i]);
}
for ( i=0; i<n%k; i++ )
{
printf("%c", str[i]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <string.h>
char str[103];
int main()
{
int i, k, n;
gets(str);
k = strlen(str);
scanf("%d", &n);
if ( n % k == 0 )
puts(str);
else
{
for ( i=n; i<k; i++ )//如果等于k 打印就会一直有一个空格
//打印到k-1 就对了
{
printf("%c", str[i]);
}
for ( i=0; i<n; i++ )//如果等于n 打印会多打印一位
{
printf("%c", str[i]);
}
printf("\n");
}
return 0;
}