如何把一个字符串中的后几个字符提取出来?急!

时间:2023-01-04 08:08:51

一串字符,“abcdefghi” 我想取后面4个字符作为新的字符串,如何做?
在C语言中

60 个解决方案

#1


main()
{
  int num;
  char a[]=abcdefghi;
  num=sizeof(a);
  char b[4]=a[num-4];
  prtitf("s%\n",b);
}

#2



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    for ( i = 0; i <=4; i++ )
        b[i] = a[strlen(a)-(4-i)]; //包括'\0' 
    printf("%s\n%s\n",a,b);

    system("PAUSE");
    return 0;
}

#3


用strcpy

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    strcpy(b, (a+strlen(a)-4));
    printf("%s\n",b);

    system("PAUSE");
    return 0;
}

#4


strncpy函数也可以,

#5


#include <string.h>
#include<stdio.h>
int main()
{
char s[]="123456789";
char p[4];

strncpy(p,s+5,strlen(s)-5);
printf("%0.4s\n",p);

getchar();
return 0;
}

#6



#include <stdio.h>
#include <string.h>

int main ()
{
char str1[]= "To be or not to be";
char str2[6];//取最后五个
strncpy (str2,str1+strlen(str1)-5, 5);
str2[5]='\0';
puts (str2);
return 0;
}

#7


我觉得1楼的代码是有问题的。

2楼和3楼的代码写得真好!

#8


#include <stdio.h>

int main(void)

{char a[]="abcdefghi",b[5];
 int i, k=0, num=strlen(a);
 for(i=num-4;i<=num;i++)

 b[k++]=a[i];
 printf("%s\n",b);
 getchar();
 return 0;
}

#9


再来个不要string.h的

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int i = 0, j = -1;
    char a[20], b[5];
    scanf("%s",a);
    while( a[i++] != '\0' );
    while( j++ < 4 )
           b[j] = a[i-(5-j)];
    printf("%s",b[4]);
    system("PAUSE");
    return 0;
}

#10



//写成函数吧,
char* GetStr(char src[], int nSrc, int nDest)
{
char* pDest=(char*)malloc(nDest+1);
for (int i=0; i<=nDest; i++) pDest[i]=src[nSrc-nDest+i];
return pDest;
}
int main()
{
char src[]={"abcdefghi"};
char* dest;
dest = GetStr(src, strlen(src), 4);
printf("%s\n", dest);

free(dest);
return 0;
}

#11


xue xi

#12


10#很强大

#13


都很强大。。。

#14


Good

#15


strstr()

#16


用指针也可以

#17


int main(void)
{
   char str[10]="abcdefghi";
   char *p=str+sizeof(str)-5;
   printf("%s\n",p);
   return 0;
}


#18


很强大,对1楼的有疑问
取倒数第四个地址不是也可以的吗

#19


//已知指向源字符串的指针,字符串长度
//返回源字符串的后面n个非‘\0’字符
char * getlaststring(char *source,int length,int n){
    char *dest =(char*)malloc(n+1);
    for(int i=0;i<n+1;i++){
          dest[i]=source[length-n+i-1];
    }
    return dest;
}

#20


还要考虑原字符串长度小于4的情况

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    strcpy(b, (strlen(a)>4?a+strlen(a)-4:a));
    printf("%s\n",b);

    system("PAUSE");
    return 0;
}

#21


3,10楼都很不错,支持一下

#22


指针操作是最简单的

可能整个字符串长度小于4,
小心strncpy的第三个参数为负数

#23


楼主:
    自己写吧!自己写了自己就会了!

上面这么多热心人!

#24


很好,很强大.

#25


void right(char *src,char *dst,int rightnum)
{
if(strlen(src)>=rightnum)
strncpy(dst,src+(strlen(src)-rightnum),rightnum);
else
strncpy(dst,src,strlen(src));
}

#26


我呆了,很强大

#27


 

#include <string.h>

呵呵 测试一下

#28


 

void 
找下感觉

#29


我醉了。。

#30



int ch;
char str[5] = "";
while(((ch = getchar()) != EOF) && (ch != '\0' || ch != '\n'))
{
    str[0] = str[1];
    str[1] = str[2];
    str[2] = str[3];
    str[3] = ch;
}
str[4] = '\0';

最近看TCPL有感(住:有input<4的情况未考虑)。

#31


#include<stdio.h>
#include<string.h>
char *getSub(char *str,int n)
{
    int len=strlen(str);
    char *subs;
    if(len<n)
    {
        subs=NULL;
        goto end;
    }
    subs=str+(len-n);

    end:
    return subs;
}

#32


学习!!

#33


都很牛X啊!

#34


为了程序的完整性
应该加个判断条件
if(strlen(str)>=4)

#35


都是牛人

#36


3楼代码有问题, 怎么能说好呢?

char *s = "abcdefghi";
return strdup(s + strlen(s) - 4);

#37


用指针就挺好

#38


恩是老火啊,我都忘记完啦,看代码都看不懂咯,看来C都被我忘得差不多咯

#39


为什么不想想如果是wchar上面的程序还适用吗?

#40


up

#41


#include <stdio.h>
#include <string.h>

void main()
{
   char *s = "abcdefghi";
   char getChar[4];
   int len = strlen(s);
   int i,j;
   j = 0;
   for(i = len-4;i<len;i++)
   {
       getChar[j++] = s[i];
   }
   printf("%s",getChar);
}

#42


[code]
#include <string.h>
#include <stdio.h>

char* subStr(char* str, int n)
{
    int len = strlen(str);
    if(len < n)
        return NULL;
    char* res = (char *)malloc(n + 1);
    strcpy(res, str + (len - n));
    res[n] = '\0';
    return res;
}

int main()
{
    char * str = "abcdefghi";
    printf("%s\n", subStr(str, 4)); 
    return 0;
}
[/code]

#43


[code=1]
#include <string.h>
#include <stdio.h>

char* subStr(char* str, int n)
{
    int len = strlen(str);
    if(len < n)
        return NULL;
    char* res = (char *)malloc(n + 1);
    strcpy(res, str + (len - n));
    res[n] = '\0';
    return res;
}

int main()
{
    char * str = "abcdefghi";
    printf("%s\n", subStr(str, 4)); 
    return 0;
}
[/code]

#44


#include <stdio.h>
#include <string.h>
void main() 

  int num; 
  char a[]="abcdefghi"; 
  num=strlen(a); 
  int i;
  char b[5];
  for(i=5;i>0;i--)
  b[i-1]=a[num-5+i]; 
  printf("%s\n",b); 
}

#45


void strstr(char *strDst,const char *strSrc)
{
assert(strDst!=NULL);
assert(strSrc!=NULL);
char *p=strDst;
for (int i=strlen(strSrc)-4;i<strlen(strSrc);i++)
{
*p=strSrc[i];
p++;
}
}
void main() { 
  char str1[]="abcdefghi";
  char str2[10];
  memset(str2,0,sizeof(str2));
  strstr(str2,str1);
}

#46


 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    strcpy(b, (strlen(a)>4?a+strlen(a)-4:a));
    printf("%s\n",b);

    system("PAUSE");
    return 0;
}

#47



#include  <stdio.h> 
#include  <stdlib.h> 
#include  <string.h> 
int main(int argc, char *argv[]) 

    int i; 
    char a[20], b[5]; 
    scanf("%s",a); 
    strcpy(b, (strlen(a)> 4?a+strlen(a)-4:a)); 
    printf("%s\n",b); 

    system("PAUSE"); 
    return 0; 

#48


大家好喜欢做这个题哦,我都看见5,6种方法了

#49


不是在另一帖中已经回你了吗?怎么又开了一贴?

#50


int num; 
  char a[]=abcdefghi; 
  num=sizeof(a); 
2楼的这没问题?????????

#1


main()
{
  int num;
  char a[]=abcdefghi;
  num=sizeof(a);
  char b[4]=a[num-4];
  prtitf("s%\n",b);
}

#2



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    for ( i = 0; i <=4; i++ )
        b[i] = a[strlen(a)-(4-i)]; //包括'\0' 
    printf("%s\n%s\n",a,b);

    system("PAUSE");
    return 0;
}

#3


用strcpy

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    strcpy(b, (a+strlen(a)-4));
    printf("%s\n",b);

    system("PAUSE");
    return 0;
}

#4


strncpy函数也可以,

#5


#include <string.h>
#include<stdio.h>
int main()
{
char s[]="123456789";
char p[4];

strncpy(p,s+5,strlen(s)-5);
printf("%0.4s\n",p);

getchar();
return 0;
}

#6



#include <stdio.h>
#include <string.h>

int main ()
{
char str1[]= "To be or not to be";
char str2[6];//取最后五个
strncpy (str2,str1+strlen(str1)-5, 5);
str2[5]='\0';
puts (str2);
return 0;
}

#7


我觉得1楼的代码是有问题的。

2楼和3楼的代码写得真好!

#8


#include <stdio.h>

int main(void)

{char a[]="abcdefghi",b[5];
 int i, k=0, num=strlen(a);
 for(i=num-4;i<=num;i++)

 b[k++]=a[i];
 printf("%s\n",b);
 getchar();
 return 0;
}

#9


再来个不要string.h的

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int i = 0, j = -1;
    char a[20], b[5];
    scanf("%s",a);
    while( a[i++] != '\0' );
    while( j++ < 4 )
           b[j] = a[i-(5-j)];
    printf("%s",b[4]);
    system("PAUSE");
    return 0;
}

#10



//写成函数吧,
char* GetStr(char src[], int nSrc, int nDest)
{
char* pDest=(char*)malloc(nDest+1);
for (int i=0; i<=nDest; i++) pDest[i]=src[nSrc-nDest+i];
return pDest;
}
int main()
{
char src[]={"abcdefghi"};
char* dest;
dest = GetStr(src, strlen(src), 4);
printf("%s\n", dest);

free(dest);
return 0;
}

#11


xue xi

#12


10#很强大

#13


都很强大。。。

#14


Good

#15


strstr()

#16


用指针也可以

#17


int main(void)
{
   char str[10]="abcdefghi";
   char *p=str+sizeof(str)-5;
   printf("%s\n",p);
   return 0;
}


#18


很强大,对1楼的有疑问
取倒数第四个地址不是也可以的吗

#19


//已知指向源字符串的指针,字符串长度
//返回源字符串的后面n个非‘\0’字符
char * getlaststring(char *source,int length,int n){
    char *dest =(char*)malloc(n+1);
    for(int i=0;i<n+1;i++){
          dest[i]=source[length-n+i-1];
    }
    return dest;
}

#20


还要考虑原字符串长度小于4的情况

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    strcpy(b, (strlen(a)>4?a+strlen(a)-4:a));
    printf("%s\n",b);

    system("PAUSE");
    return 0;
}

#21


3,10楼都很不错,支持一下

#22


指针操作是最简单的

可能整个字符串长度小于4,
小心strncpy的第三个参数为负数

#23


楼主:
    自己写吧!自己写了自己就会了!

上面这么多热心人!

#24


很好,很强大.

#25


void right(char *src,char *dst,int rightnum)
{
if(strlen(src)>=rightnum)
strncpy(dst,src+(strlen(src)-rightnum),rightnum);
else
strncpy(dst,src,strlen(src));
}

#26


我呆了,很强大

#27


 

#include <string.h>

呵呵 测试一下

#28


 

void 
找下感觉

#29


我醉了。。

#30



int ch;
char str[5] = "";
while(((ch = getchar()) != EOF) && (ch != '\0' || ch != '\n'))
{
    str[0] = str[1];
    str[1] = str[2];
    str[2] = str[3];
    str[3] = ch;
}
str[4] = '\0';

最近看TCPL有感(住:有input<4的情况未考虑)。

#31


#include<stdio.h>
#include<string.h>
char *getSub(char *str,int n)
{
    int len=strlen(str);
    char *subs;
    if(len<n)
    {
        subs=NULL;
        goto end;
    }
    subs=str+(len-n);

    end:
    return subs;
}

#32


学习!!

#33


都很牛X啊!

#34


为了程序的完整性
应该加个判断条件
if(strlen(str)>=4)

#35


都是牛人

#36


3楼代码有问题, 怎么能说好呢?

char *s = "abcdefghi";
return strdup(s + strlen(s) - 4);

#37


用指针就挺好

#38


恩是老火啊,我都忘记完啦,看代码都看不懂咯,看来C都被我忘得差不多咯

#39


为什么不想想如果是wchar上面的程序还适用吗?

#40


up

#41


#include <stdio.h>
#include <string.h>

void main()
{
   char *s = "abcdefghi";
   char getChar[4];
   int len = strlen(s);
   int i,j;
   j = 0;
   for(i = len-4;i<len;i++)
   {
       getChar[j++] = s[i];
   }
   printf("%s",getChar);
}

#42


[code]
#include <string.h>
#include <stdio.h>

char* subStr(char* str, int n)
{
    int len = strlen(str);
    if(len < n)
        return NULL;
    char* res = (char *)malloc(n + 1);
    strcpy(res, str + (len - n));
    res[n] = '\0';
    return res;
}

int main()
{
    char * str = "abcdefghi";
    printf("%s\n", subStr(str, 4)); 
    return 0;
}
[/code]

#43


[code=1]
#include <string.h>
#include <stdio.h>

char* subStr(char* str, int n)
{
    int len = strlen(str);
    if(len < n)
        return NULL;
    char* res = (char *)malloc(n + 1);
    strcpy(res, str + (len - n));
    res[n] = '\0';
    return res;
}

int main()
{
    char * str = "abcdefghi";
    printf("%s\n", subStr(str, 4)); 
    return 0;
}
[/code]

#44


#include <stdio.h>
#include <string.h>
void main() 

  int num; 
  char a[]="abcdefghi"; 
  num=strlen(a); 
  int i;
  char b[5];
  for(i=5;i>0;i--)
  b[i-1]=a[num-5+i]; 
  printf("%s\n",b); 
}

#45


void strstr(char *strDst,const char *strSrc)
{
assert(strDst!=NULL);
assert(strSrc!=NULL);
char *p=strDst;
for (int i=strlen(strSrc)-4;i<strlen(strSrc);i++)
{
*p=strSrc[i];
p++;
}
}
void main() { 
  char str1[]="abcdefghi";
  char str2[10];
  memset(str2,0,sizeof(str2));
  strstr(str2,str1);
}

#46


 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    int i;
    char a[20], b[5];
    scanf("%s",a);
    strcpy(b, (strlen(a)>4?a+strlen(a)-4:a));
    printf("%s\n",b);

    system("PAUSE");
    return 0;
}

#47



#include  <stdio.h> 
#include  <stdlib.h> 
#include  <string.h> 
int main(int argc, char *argv[]) 

    int i; 
    char a[20], b[5]; 
    scanf("%s",a); 
    strcpy(b, (strlen(a)> 4?a+strlen(a)-4:a)); 
    printf("%s\n",b); 

    system("PAUSE"); 
    return 0; 

#48


大家好喜欢做这个题哦,我都看见5,6种方法了

#49


不是在另一帖中已经回你了吗?怎么又开了一贴?

#50


int num; 
  char a[]=abcdefghi; 
  num=sizeof(a); 
2楼的这没问题?????????