字符串-写了这样一个函数,为什么第一个循环中for语句会失效?

问题描述

写了这样一个函数,为什么第一个循环中for语句会失效?

求教:第一条for语句失效,这是为什么?

 /*函数功能:找出一个字符中相同字符子串的最大长度,暂时还不知道对不对*/
int string_search(char a[])
{
    int i,j;
    int max_len;   // 相同字符子串最大长度
    int every_len;  // 临时存储子串长度
    int all_len;     // 传进来的字符串总长度

    max_len = 1;
    all_len = strlen(a);

    for(i = 0; i < all_len - 1; i+every_len)   // 这里会产生警告信息,语句无作用
    {
        every_len = 1;
        for(j = i+1; j < all_len; j++)
        {
            if(a[i] != a[j])
                break;
            every_len += 1;
        }
        if(max_len < every_len)
            max_len = every_len;
    }

    return max_len;
}

解决方案

for(i = 0; i < 2 - 1;i=i+every_len){} 并且every_len要初始化一个值

解决方案二:

你最好对every_len进行初始化,有一些语言,不会自动初始化int类型,那样你定义的变量可能就是所分配内存中的值,而不是0

解决方案三:

是 i=i+every__len。 你看看for 循环的定义吧,我觉得 你这里 用 i++ 就可以了

解决方案四:

你在迭代语句i+every_len中并没有改变i的值。所以i永远都是初始值,根本无法构成循环。
写成i+=every_len即可。

解决方案五:

还是要养成良好的习惯,内置类型的变量,记得在定义的时候进行初始化,否则程序难免会出现一些不容易发现的小问题,习惯真的很重要的

时间: 2025-01-27 01:08:32

字符串-写了这样一个函数,为什么第一个循环中for语句会失效?的相关文章

写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数。

//写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数. /*思路: */ #include <iostream> #include <string> using namespace std; int Find(string str_long,string str_short) { if(str_long.length()<str_short.length()) { cout<<"error"<<endl;return 0

js-JS里一个函数内可以有几个if语句?

问题描述 JS里一个函数内可以有几个if语句? 这么写是没错的, <script type="text/javascript"> function show(a){ if(document.getElementById('A'+a).style.display=='none'||document.getElementById('pic'+a).src=='bottom.png'){ document.getElementById('A'+a).style.display='

c c++-写一个函数判断输入的字符串是否是一个点分十进制格式的IP地址

问题描述 写一个函数判断输入的字符串是否是一个点分十进制格式的IP地址 写一个函数判断输入的字符串是否是一个点分十进制格式的IP地址 解决方案 #include ""winsock2.h""#pragma comment(libws2_32.lib"")BOOL CheckIsValidIP(const char* sIP){ unsigned long ulAddress = inet_addr(sIP); if (INADDR_NONE ==

写一个函数对字符串数组排序,使所有变位词都相邻

题目 写一个函数对字符串数组排序,使得所有的变位词都相邻. 解答 首先,要弄清楚什么是变位词.变位词就是组成的字母相同,但顺序不一样的单词. 比如说:live和evil就是一对变位词.OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了.它要求我们在排序的过程中,按照变位词的准则来排序. 这种情况下,我们还是可以调用sort函数,不过要自己写一个对比函数. 一般情况下我们如果要排序一个长度为n的数组A,我们可以这

写一个函数找到给定字符串的位置

题目 给你一个排好序的并且穿插有空字符串的字符串数组,写一个函数找到给定字符串的位置. 例子:在字符串数组 ["at", "", "", "", "ball", "", "", "car", "","", "dad", "", ""] 中找到&quo

最近经常见到有人问长英文不自动换行的问题,里面是我写的一个函数,供大家参考

参考|函数|问题 一段没有空格的长英文,系统会认为它是一个单词,为了保持单词的完整性不会自动换行.其实这种情况不处理也可以,因为在实际应用中除了测试或有人捣乱不会出现这种情况,不过为了以防万一吧,我几个月前写了下面这个函数,只是一种权宜之计,为了对付恶意破坏者.  '------------------------------------------------- ' '  function name: autowrap ' ' '  description : 解决长英文不自动换行的问题 '

编写一个函数,转换十进制数为字符串,需要处理负数,为什么会有错误呢

问题描述 编写一个函数,转换十进制数为字符串,需要处理负数,为什么会有错误呢 /* 编写一个函数,转换字符串的逆序字符串,比如"ABC"转换为"CBA".*/void reverse(char r[]int n){ int i; int temp; for(i=0;i<n/2;i++) { temp=r[i]; r[i]=r[n-i-1]; r[n-i-1]=temp; }}void chang1(int a){ int i = 0 j = 0 temp =

c语言数组 字符串-n为2到50,如何顺序输出1/n的十进制表示的字符串(写出一个循环节为止)

问题描述 n为2到50,如何顺序输出1/n的十进制表示的字符串(写出一个循环节为止) 输出一个循环周期后就结束该数的输出1/7=0.142857n为2到50,如何顺序输出1/n的十进制表示的字符串(写出一个循环节为止) 解决方案 #include <iostream> using namespace std; void foo(int n) { int x = 1; int * initmod = new int[n]; cout << "1 / " <&

用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里

问题描述 用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里 int substr_index( const char substr[], const char str[]) { int flag = -1; int sizeOfSubstr = sizeof(substr)/sizeof(char); int sizeOfStr = sizeof(str)/sizeof(char); for (int i = 0; i < sizeOfStr; i+