搜索
查看: 1340|回复: 6
打印 上一主题 下一主题

字符串操作

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-3 10:22:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <stdio.h>

int strlen(char *str)
{
   int i;

   for ( i = 0; str != '\0'; i++ ); /* 用循环计算长度 */
   return i;
}

/* ---------------------------------------- */
/*  在字符串中找寻子字符串                      */
/* ---------------------------------------- */
int strindex(char *str,char *substr)
{
   int end,i,j;

   end = strlen(str) - strlen(substr);  /* 计算结束位置   */
   if ( end > 0 )                      /* 子字符串小于字符串 */
   {
      for ( i = 0; i <= end; i++ )
         /* 用循环比较 */
         for ( j = i; str[j] == substr[j-i]; j++ )
            if ( substr[j-i+1] == '\0' ) /* 子字符串字结束   */
               return i + 1;           /* 找到了子字符串   */
   }
   return -1;
}

/* ---------------------------------------- */
/*  主程式: 在字符串中找寻子字符串出现位置.     */
/* ---------------------------------------- */
void main()
{
   char string[100];                   /* 字符串定义   */
   char substring[100];                /* 子字符串定义 */
   int result;                         /* 找寻结果       */

   printf("请输入字符串 ==> ");
   gets(string);                       /* 读取字符串       */
   printf("请输入要搜索的子字符串 ==> ");
   gets(substring);                    /* 读取子字符串     */
   result = strindex(string,substring);  /* 搜寻子字符串   */
   if ( result > 0 )
      printf("子字符串 %s 位置在 %d\n",substring,result);
   else
      printf("没有找到子字符串 %s\n",substring);
   getchar();
}


查找字符串的个数

#include   <iostream>
#include   <string>

int   searchString(string   str1,   string   str2)
{
int   count   =   0;
int   start   =   0;
int   len1   =   str1.length();
int   len2   =str2.length();
string   t_str;
while   (start <=(len1-len2))
{
t_str   =   str1.substr(start,len2);
if   (t_str   ==   str2)
{
count++;
start   +=   len2;
}
else
{
start++;
}
}
return   count;
}

int   main()
{
string   str1   =   "abcdabcdddd ";
string   str2   =   "abc ";
int   i   =   searchString(str1,   str2);
cout < < "there   are   " < <i < < "   " < <str2 < < "   in   " < <str1 < < ". " < <endl;
return   0;
}

字符串 右移

void loopMove(char* pStr, int steps);

int main(int argc, char* argv[])
{
char str[] = "abcdefg";
//char* str = "abcdefg"; //为什么不能用char*
cout<<str<<endl;
loopMove(str, 2);

cout<<str<<endl;
return 0;
}

void loopMove(char* pStr, int steps)
{
int n = strlen( pStr ) - steps;
char tmp[24];  
memcpy( tmp, pStr + n, steps );
memcpy(pStr + steps, pStr, n );
memcpy(pStr, tmp, steps );  
}


沙发
发表于 2013-3-3 11:37:40 | 只看该作者
#include <stdio.h>
int strlen(char *str)
{
   int i;
   for ( i = 0; str != '\0'; i++ ); /* 用循环计算长度 */
   return i;
}

明显是写错了吧
板凳
 楼主| 发表于 2013-3-3 19:25:08 | 只看该作者
rosynirvana 发表于 2013-3-3 11:37
#include
int strlen(char *str)
{

本文是在win-tc,下运行,不是Gcc
地板
发表于 2013-3-3 19:43:10 | 只看该作者
4k-Rn 发表于 2013-3-3 19:25
本文是在win-tc,下运行,不是Gcc

你确定不是str != '\0' 或者 *(str + i) != '\0'吗
5#
 楼主| 发表于 2013-3-3 19:51:04 | 只看该作者
rosynirvana 发表于 2013-3-3 19:43
你确定不是str != '\0' 或者 *(str + i) != '\0'吗

我明明写的是str!='\0'.
bu'shi'z'z
6#
发表于 2013-3-3 20:53:20 | 只看该作者
是不是被论坛转义了……
  1. str[i] != '\0'
复制代码
7#
发表于 2013-7-22 21:31:32 | 只看该作者
{:soso_e129:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表